SELECT MAX(DATE) GROUP BY WHERE SPECIFIC DATE 问题
Issue with SELECT MAX(DATE) GROUP BY WHERE SPECIFIC DATE
这是我的第一个问题,在此先感谢您的帮助。
我有两个表 workers 和 rotation,其中存储出勤、替换等数据。每个工人都有当天状态的记录(正常考勤,临时晋升替代或无故缺席)我想知道不包括今天的工人小组的最后状态是什么(知道今天可能有或可能没有记录)我试试这个:
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
Having
语句是在项目分组后应用规则;您希望在对项目进行分组之前应用过滤器。也就是说,您上面的内容 return 所有最后日期不是今天的组(组的子集);下面的内容将 return 最后日期早于今天的所有组(如果组的唯一条目来自今天或之后,则仅是组的子集)。
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
这是我的第一个问题,在此先感谢您的帮助。 我有两个表 workers 和 rotation,其中存储出勤、替换等数据。每个工人都有当天状态的记录(正常考勤,临时晋升替代或无故缺席)我想知道不包括今天的工人小组的最后状态是什么(知道今天可能有或可能没有记录)我试试这个:
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
Having
语句是在项目分组后应用规则;您希望在对项目进行分组之前应用过滤器。也就是说,您上面的内容 return 所有最后日期不是今天的组(组的子集);下面的内容将 return 最后日期早于今天的所有组(如果组的唯一条目来自今天或之后,则仅是组的子集)。
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