这是我的第一个问题,在此提前感谢您的帮助。 我有两个表工作人员和轮换,其中存储来自出勤,替换等的数据。每个工人都记录当天的状态(正常出勤,临时促销替代)或者不合理的缺席)我想知道今天工作人员团体的最后状态是什么而不包括今天(知道今天可能有或没有记录)我试试这个:
SELECT a.id_worker,MAX(b.datetime_event)
FROM workers a INNER JOIN rotation b ON a.id_worker=b.id_worker
WHERE b.status_confirm=1
GROUP BY a.id_worker
HAVING MAX(b.datetime_event) < DATEADD(dd,DATEDIFF(dd,0,GETDATE()),0) --Today '00:00'
当我删除HAVING子句时,但是当然今天不存在记录。
我正在使用SQL Server 2008
答案 0 :(得分:1)
Having
语句是在项目分组后对项目应用规则;您希望在项目分组之前应用过滤器。即你上面所拥有的将返回今天最后一个日期不是的所有组(组的子集);下面的内容将返回所有具有今天之前的最后一个日期的组(如果组的唯一条目来自今天或之后,则只有一部分组。)
SELECT a.id_worker,MAX(b.datetime_event)
FROM workers a INNER JOIN rotation b ON a.id_worker=b.id_worker
WHERE b.status_confirm=1
and b.datetime_event < cast(cast(GETDATE() as date) as datetime) --Today '00:00'
GROUP BY a.id_worker