我有一张表如下:
id value date
---------------
a, test, 01-01-15
a, test, 01-02-15
a, test, 01-03-15
a, test1, 01-04-15
a, test1, 01-05-15
b, test, 01-01-15
b, test, 01-02-15
我需要编写一个查询,以便能够获取a&的最新映射。 B'/ P>
例如,我希望我的结果如下:
a, test1, 01-05-15
b, test, 01-02-15
我似乎无法完成如何实现这个目标
select max(date)
仅返回最新日期值
和select max(date), value group by value
显然不会返回id列
答案 0 :(得分:1)
如果您的数据库支持Row_number
,请使用此
select id,value,date from
(
select row_number() over(partition by value order by date desc) as RN,
id,value,date
from yourtable
) A
where RN=1
另一种方法是将结果加回到表中。
SELECT A.id,
A.value,
A.date
FROM yourtable A
INNER JOIN (SELECT Max(date) AS date,
value
FROM yourtable
GROUP BY value) B
ON A.date = b.date
AND A.value = B.value
答案 1 :(得分:1)
根据您使用的SQL版本,您可能有一个名为ROW_NUMBER() OVER()
的函数可以提供帮助。
WITH x AS
(SELECT id, value, date
, ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) AS RowNum
FROM table
)
SELECT id, value, date
FROM x
WHERE RowNum = 1
以上内容适用于SQL Server以及支持CTE和窗口函数的任何其他内容。您也可以将其编写为派生表,如下所示:
SELECT id,value,date 从 (SELECT id,value,date ,ROW_NUMBER()OVER(PAR BY BY BY ORDER BY date DESC)AS RowNum 从表 )AS x RowNum = 1
答案 2 :(得分:1)
SELECT DISTINCT ON (id) *
FROM tbl
ORDER BY id, date DESC NULLS LAST;
详细说明:
对于每id
个多个行的数据分发: