6

假设我想要一个表格,它可以为我提供下面的 4 列数据,但我只希望每个唯一“ID”有一行,使用“日期”列仅选择每个唯一“ID”的最新日期:

|--ID--|-Type-|-Code-|--Date--|
|   1  |   A  |  11  |11/07/13|
|   2  |   A  |  11  |11/07/13|
|   2  |   B  |  12  |10/07/13|   <-- don't want this record from ID=2 as
|   3  |   A  |  11  |11/07/13|       there is a more recent date for it
|   4  |   A  |  10  |11/07/13|       than 10/07/2013
|   5  |   A  |  11  |11/07/13|

我尝试调整似乎是针对类似问题的答案,但出现以下错误:

您的查询不包含作为聚合函数一部分的指定表达式“ID”

这是我尝试在 Access 中运行的那个 SQL 的改编版本:

SELECT ESM.ID, ESM.Type, ESM.Code, ESM.Date
FROM Emp_Stat_Mon As ESM
INNER JOIN
    (
    SELECT ID, MAX(Date) AS MaxDate
    FROM Emp_Stat_Mon
    GROUP BY ID
    ) groupedESM ON ESM.ID = groupedESM.ID AND ESM.Date = groupedESM.MaxDate;
4

2 回答 2

8

这样做:

SELECT  ID, Type, Code, Date
FROM Emp_Stat_Mon t1
WHERE t1.Date = 
    (SELECT Max(t2.Date) 
     FROM Emp_Stat_Mon t2 
     WHERE t2.ID=t1.ID 
     GROUP BY t2.ID)

带有示例数据的 SQLFiddle:SQLFiddle

于 2013-07-11T12:03:02.403 回答
0

我只需要让类似的东西工作。我曾经DMax()把我带到那里,但它本质上与 Ron 的代码做同样的事情。

SELECT ID, Type, Code, Date
FROM Emp_Stat_Mon As ESM
WHERE ESM.Date = DMax("Date", "Emp_Stat_Mon", "ID=" & ESM.ID);

编辑:

当我把它放在一起时,我担心性能。我希望我自己的桌子变大,所以应该避免这种方法。我认为这里有很好的讨论。我很难让第二个 SELECT 为我工作,但我认为它值得第二次机会!

于 2014-02-10T19:24:05.700 回答