我有一个完整的查询,其中我按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
我有一个非常大的表,因此查询必须相对有效。关于如何做到这一点的任何建议?
答案 0 :(得分:0)
这不会给你答案,但它可能有助于某人克服终点线。我还没喝咖啡......: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”时进行分组,但我无法弄清楚如何做到这一点。