我有以下数据,我试图用最近的事件日期来记录。但是,我无法使用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`
答案 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匹配的原始表,日期是最大值,或者没有最大值。