Nat*_*Pet 2 sql sql-server sql-server-2008-r2
我有一个查询具有以下内容
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
Run Code Online (Sandbox Code Playgroud)
我需要做的是获取给定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
Run Code Online (Sandbox Code Playgroud)
我尝试使用Top(1)和基于ID的组,但是没有成功
有几种方法可以做到这一点.一种方法是使用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
Run Code Online (Sandbox Code Playgroud)
另一个选择是使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8833 次 |
| 最近记录: |