时间范围中的计数值(sql)

kiz8lqtg  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(243)

我正在尝试进行一个sql查询,在该查询中,我要计算包含在三个范围中的人员:

Tomorrow (from 06:00 a.m. to 12:00 p.m.)
Afternoon (from 12:00 p.m. to 9:00 p.m.)
Night (from 9:00 p.m. to 6:00 a.m.)

我有两个属性,签入时间和 checkout 时间,其格式如下:

2020-05-20 12:10:29.000

我按以下方式操作,但不起作用,例如在夜间:

select (case when datepart(hour, dateIn) > datepart(hour, '21')) and
                  datepart(minute, dateIn) > datepart(minute, '00'))
htzpubme

htzpubme1#

如果我理解正确的话,你可以减去6小时得到日期,然后用时间比较来计算班次。所以,我想你想要:

select convert(date, dateadd(hour, -6, t.datein)), v.shift, count(*)
from t cross apply
     (values (case when convert(time, t.datein) < '06:00:00' then 'night'
                   when convert(time, t.datein) < '12:00:00' then 'morning'
                   when convert(time, t.datein) < '21:00:00' then 'afternoon'
                   else 'night'
              end)
     ) v(shift)
group by convert(date, dateadd(hour, -6, datein)), v.shift;

相关问题