Abfrage auf Zeitschiene

robvoi

Neuer Benutzer
Beiträge
3
Hi,
ich habe folgende Herausforderung:
Tabelle: TB_Mitarbeiter
Spalten: Mitarbeiternumer, Datum_Vertragsstart, Datum_Vertragsende

Ich brauche für jede Kalenderwoche die Anzahl der Mitarbeiter.
Also:
2019-1 190
2019-2 189
...
2019-53 220
...
2020-6 240

Wie gehe ich das am besten an?
 
Werbung:
Lösung mit PostgreSQL:

Code:
create database test;
create table mitarbeiter(id serial primary key, arbeitszeit daterange);
insert into mitarbeiter(arbeitszeit) values ('(2020-01-01, 2020-01-31)');
insert into mitarbeiter(arbeitszeit) values ('(2020-02-01, 2020-02-29)');
insert into mitarbeiter(arbeitszeit) values ('(2020-03-01, 2020-03-31)'):
select count(arbeitszeit) from mitarbeiter group by (select extract(month from lower(arbeitszeit)));

(In meinem Beispiel 3 Zeilen mit je 1 Mitarbeiter)
 
Werbung:
Da SQL Server keinen Daterange Typen kennt, hier eine etwas umständlichere Lösung
Code:
create table workerContract(id bigint primary key, employmentStart  date, employmentEnd date);
insert into workerContract values (1,'2020-01-01', '2020-04-12');
insert into workerContract values (2,'2020-01-25', '2020-03-09');
insert into workerContract values (3,'2020-03-01', '2020-03-31');

WITH InfiniteRows (RowNumber) AS (             -- define CTE (Common Table Expression)
   SELECT 1 AS RowNumber                       -- Anchor member definition                 
   UNION ALL
   SELECT a.RowNumber + 1    AS RowNumber
   FROM   InfiniteRows a
   WHERE  a.RowNumber < 54                     -- query construction allows a little fuzziness,
                                               -- 60 or 72 would be okay, too
)
SELECT RowNumber as KW, count(c.id) as countEmp_
  FROM infiniteRows i, workerContract c
 WHERE i.Rownumber between                     -- limit result to effictive contract dates of workers
       datepart(ww, c.employmentStart) and  
       datepart(ww, c.employmentEnd)
 GROUP BY rownumber;

Mit weiteren Kommentaren unter rextester Find effective count of employees within date range for each calendar week, Sql Server - rextester
 
Zurück
Oben