我的查询包含以下内容
DATE ID Name
--- ------------ -----------
2012-02-07 11:24:53.000 00001-KK-12 Smith, JEN
2011-12-28 00:00:00.000 00001-KK-12 Bearson, Matt
2012-02-13 10:38:18.000 00003-KJ-12 Wick, Julian
我需要做的是获取给定ID的最新日期,然后显示结果
所以在这种情况下,它将是:
DATE ID Name
--- ------------ -----------
2012-02-07 11:24:53.000 00001-KK-12 Smith, JEN
2012-02-13 10:38:18.000 00003-KJ-12 Wick, Julian
我尝试使用Top(1)和基于ID的组,但是没有成功
答案 0 :(得分:9)
有几种方法可以做到这一点。一种方法是使用row_number。如果有可能在日期上存在并且您想随意选择一个,那么它很有用。
WITH CTE AS (
SELECT
row_number() over (partition by id order by date desc) rn,
date,
id,
name
FROM
table)
SELECT date,
id,
name
FROM CTE WHERE RN = 1
另一种选择是使用ANTI JOIN(没有聚合没有CTE),但是如果给定ID的第一个并列,则会返回多个结果。
SELECT
t.date,
t.id,
t.name
FROM
table t
LEFT JOIN table t1
WHERE t.Id = t1.id
and t.Date < t1.Date
WHERE
t1.Date is null
答案 1 :(得分:1)
您想使用ROW_NUMBER() OVER。我即将创建一个样本,但看起来康拉德已经做过了:)