根据日期字段从数据集中获取最新数据

时间:2015-09-11 20:33:32

标签: sql vba ms-access ms-access-2010

这看起来很简单,但我无法得到它。假设这个数据集:

ID  SID AddDate
1   123 1/1/2014
2   123 2/3/2015
3   123 1/4/2010
4   124 
5   124 
6   125 2/3/2012
7   126 2/2/2012
8   126 2/2/2011
9   126 2/2/2011

我需要的是最新的AddDate以及每个SID的相关ID。

因此,我的数据集应该返回ID 2,5,6和7

我尝试过max(AddDate),但它不会给我一个与之关联的正确ID。

我的SQL字符串:

SELECT First(Table1.ID) AS FirstOfID, Table1.SID, Max(Table1.AddDate) AS MaxOfAddDate
FROM Table1
GROUP BY Table1.SID;

3 个答案:

答案 0 :(得分:2)

您可以使用返回每个Sid的最大添加日期的子查询,然后可以将此子查询连接回数据集表:

SELECT
  MAX(id)
FROM
  ds INNER JOIN (
    SELECT Sid, Max(AddDate) AS MaxAddDate
    FROM ds
    GROUP BY ds.Sid) mx
  ON ds.Sid = mx.Sid AND (ds.AddDate=mx.MaxAddDate or MaxAddDate IS NULL)
GROUP BY
  ds.Sid

如果MaxAddDate为NULL(没有AddDate),则连接仍然必须成功,并且如果有多个匹配的ID,则看起来您想要最大的ID。

答案 1 :(得分:1)

您可以更改查询以先获得分组,然后执行JOIN之类的

SELECT First(Table1.ID) AS FirstOfID, 
Table1.SID, xx.MaxOfAddDate
FROM Table1 JOIN (
SELECT ID, Max(AddDate) AS MaxOfAddDate
FROM Table1
GROUP BY SID) xx ON Table1.ID = xx.ID;

答案 2 :(得分:0)

尝试

select SID from table1 
where addDate in (select max(addDate) from Table1)