获取其他列值更改的最新日期值

时间:2015-08-11 15:29:39

标签: sql postgresql date max

我有一张表如下:

  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列

3 个答案:

答案 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多个行的数据分发: