Sql 如何按最大日期显示行

Sql 如何按最大日期显示行,sql,sql-server,tsql,sql-server-2005,Sql,Sql Server,Tsql,Sql Server 2005,使用SQLServer2005 表1 ID Date Value 001 23/01/2012 100 002 24/02/2012 200 002 21/01/2012 300 003 18/02/2012 200 003 19/02/2012 100 ... 我想显示每个id的最大(日期)。如何执行此操作 我试过了 选择id、max(日期)、表组中的值(按id)、值 但是显示所有行的输出 预期产出 ID Date Value 001 23/01/2012 100 002 24/02/2

使用SQLServer2005

表1

ID Date Value

001 23/01/2012 100
002 24/02/2012 200
002 21/01/2012 300
003 18/02/2012 200
003 19/02/2012 100
...
我想显示每个id的最大(日期)。如何执行此操作

我试过了

选择id、max(日期)、表组中的值(按id)、值

但是显示所有行的输出

预期产出

ID Date Value

001 23/01/2012 100
002 24/02/2012 200
003 19/02/2012 100
...
需要SQL查询帮助吗

with CTE as 
(
Select Id, MAX(Date) as maxdate
from table1 
Group by Id
)
Select t1.ID, t1.Maxdate, t2.Value
from CTE t1, Table1 t2
where t1.ID = t2.ID
and t1.maxdate = t2.date;

使用排名:

select id,
date, value from (
select id,
date, value,
Rank() over (Partition BY ID order by date DESC) rank
from Table1) a
where a.rank = 1
使用秩超过:

select id,
date, value from (
select id,
date, value,
Rank() over (Partition BY ID order by date DESC) rank
from Table1) a
where a.rank = 1
试试像这样的东西

SELECT id, date, value 
FROM table1, (SELECT id, max(date) FROM table1 GROUP BY id) t
WHERE table1.id =t.id AND table1.date=t.date 
试试像这样的东西

SELECT id, date, value 
FROM table1, (SELECT id, max(date) FROM table1 GROUP BY id) t
WHERE table1.id =t.id AND table1.date=t.date 
带+功能的选项

演示

带运算符的选项

演示

带运算符的选项

带+功能的

选项演示

演示

带运算符的选项

演示

带运算符的选项


仅按id分组演示。不需要按值分组,也可以从选择的部分中删除值,否则会引发错误如果ID在同一天(和最大的一天)出现两次会发生什么?只按ID分组。不需要按值分组,也可以从选择部分中删除值,否则会引发错误如果ID在同一天(以及最大的一天)出现两次,会发生什么情况?+1我怀疑OP实际上可能需要行编号()而不是排名(),如果可能的话,通过
value
断开联系。+1我怀疑OP实际上可能需要行号()而不是秩号(),如果可能的话,通过
value
断开联系。
SELECT t1.id, t1.date, t1.value
FROM Table1 t1 CROSS APPLY (
                            SELECT 1 AS 'IsMatch'
                            FROM Table1 t2
                            WHERE t1.id = t2.id
                            HAVING MAX(t2.date) = t1.date
                            ) o