按条件分组

时间:2013-11-22 21:57:23

标签: ms-access

我有一个完整的查询,其中我按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

我有一个非常大的表,因此查询必须相对有效。关于如何做到这一点的任何建议?

1 个答案:

答案 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”时进行分组,但我无法弄清楚如何做到这一点。