我有一个总查询,其中我按id分组,并在每个组中从第一行取一个date1字段,从最后一行取一个date2。我想做的是,只有在两个日期之间没有区别的情况下,才进行分组。
例如,我有一张桌子:
id date1 date2
1 1-1-2012 5-5-2012
1 5-5-2012 27-6-2012
2 26-4-2012 23-8-2012
2 22-5-2012 5-6-2012我想作出以下选择:
id date1 date2
1 1-1-2012 27-6-2012
2 26-4-2012 23-8-2012
2 22-9-2012 5-12-2012我有一个非常大的表,所以查询必须是相对高效的。对于如何做到这一点,有什么建议吗?
发布于 2013-11-23 13:12:12
这不会给你答案,但它可能会帮助某人越过终点线。我只是还没喝咖啡..。*o)
SELECT T1.ID, Min(T1.Date1) as Dt1A, Max(T1.Date2) as Dt2A, Max(T2.Dt1) as Dt1B, Max(T2.Dt2) as Dt2B, IIF(Max(T2.Dt1) = Max(T2.Dt2), "True", "False") as Status
FROM tblDateStuff as T1
LEFT JOIN (
SELECT ID, Max(Date1) as Dt1, Min(Date2) as Dt2
FROM tblDateStuff
GROUP BY ID
ORDER BY ID ASC) as T2
ON T1.ID = T2.ID
GROUP BY T1.ID
ORDER BY T1.ID ASC您可能需要将整个代码块封装到一个更大的块中,并对其执行一些操作。似乎您只想分组如果Status = "True",但我不知道如何做到这一点。
https://stackoverflow.com/questions/20155231
复制相似问题