查询以获取最新日期

时间:2015-09-11 18:34:58

标签: ms-access ms-access-2007

我有以下数据,我试图用最近的事件日期来记录。但是,我无法使用first,last,max或min使查询正常工作。

以下是数据示例。我希望从最近的日期开始。还应注意,如果特定ID没有事件,我仍然需要在结果中显示ID。

`ID     FirstName LastName srp_ID Incident Date Preventability mpp_senioritydate
xxxxxx  James     Naismith                                    5/16/2010                                 
xxxxxx  John      Smith                                       7/22/2006                 
xxxxxx  John      Smith    2396                               7/22/2006                
xxxxxx  John      Smith    2240                               7/22/2006
xxxxxx  John      Smith    1140   2/15/2010 10:00:00    TP    7/22/2006
xxxxxx  John      Smith    1206   5/19/2010 07:40:00    NTP   7/22/2006`

2 个答案:

答案 0 :(得分:0)

尝试类似:

SELECT *
FROM MyTable
WHERE [Incident Date] = (
    SELECT Max([Incident Date]) FROM MyTable 
    WHERE NOT IsNull([Incident Date] )
)

修改

听起来你可能想要更像这样的东西:

SELECT ID, FirstName, LastName, Max([Incident Date])
FROM MyTable
GROUP BY ID, FirstName, LastName

这将为您提供您所要求的内容。如果我误解了你需要整个记录,那么你需要创建一个指针。

基本上,“指针”数据集是包含一些唯一键值的查询。获得指针数据集后,可以链接回原始表并提取与Key值匹配的记录。因此,如果您的数据集看起来像这样:

Key   ID     FirstName LastName srp_ID Incident Date Preventability mpp_senioritydate
1   xxxxxx   James     Naismith                                     5/16/2010
2   xxxxxx   John      Smith                                        7/22/2006 
3   xxxxxx   John      Smith    2396                                7/22/2006 
4   xxxxxx   John      Smith    2240                                7/22/2006 
5   xxxxxx   John      Smith    1140   2/15/2010 10:00:00    TP     7/22/2006    
6   xxxxxx   John      Smith    1206   5/19/2010 07:40:00    NTP    7/22/2006

然后你需要得到一个查询结果,它会给你Keys = 1&所以,你可以这样做:

SELECT
  MAX(Keys)
FROM
  MyTable INNER JOIN (
    SELECT ID, Max([Incident Date]) AS MaxDate
    FROM MyTable 
    GROUP BY MyTable.ID) mx
  ON MyTable.ID = mx.ID AND (MyTable.[Incident Date]=mx.MaxDate or MaxDate IS NULL)
GROUP BY
  MyTable.ID

您现在拥有相关的密钥。因此,您可以使用它作为指针来从第一个表中提取所有数据,如下所示:

SELECT *
FROM MyTable
WHERE Keys IN (SELECT Keys FROM MyQuery) 

可能有一种方法可以将两者结合在一起,但不幸的是,我的大脑在很长一周内都有点熟。但希望这会让你朝着正确的方向发展。

答案 1 :(得分:0)

您可以使用以下查询:

SELECT mytable.*
FROM
  mytable INNER JOIN (
    SELECT
      mytable.FirstName,
      mytable.LastName,
      Max(mytable.IncidentDate) AS MaxIncidentDate
    FROM
      mytable
    GROUP BY
      mytable.FirstName,
      mytable.LastName) mx
  ON
    mytable.FirstName = mx.FirstName
    AND mytable.LastName = mx.LastName
    AND (mytable.IncidentDate=mx.MaxIncidentDate
         OR mx.MaxIncidentDate IS NULL)

子查询将返回具有最大事件日期的所有FirstName,LastName组合(如果没有事件日期,则返回null)。然后,您可以将此子查询返回到FirstName和LastName匹配的原始表,日期是最大值,或者没有最大值。