用于获取最新数据的SQL查询

时间:2016-05-13 05:28:40

标签: sql greatest-n-per-group

我想做一个SQL查询,我只能看到我的最新货件。目前我得到以下结果。

item    date        licence plate number
1       13.5.2016   abc-123
2       13.5.2016   abc-123
3       10.5.2016   xyz-567
1       20.4.2016   abc-123
2       20.4.2016   abc-123
6       10.5.2016   xyz-567

但我想根据车牌号码获取最新货件。想要的输出看起来像

item    date        licence plate number
1       13.5.2016   abc-123
2       13.5.2016   abc-123
3       10.5.2016   xyz-567

4 个答案:

答案 0 :(得分:3)

您可以使用以下查询:

SELECT t1.*
FROM mytable AS t1
JOIN (
   SELECT item, MAX("date") AS "date"
   FROM mytable
   GROUP BY item
) AS t2 ON t1.item = t2.item AND t1."date" = t2."date"

查询使用派生表,该表选择每item的最新日期。使用此派生表,我们可以选择与此日期对应的记录。

答案 1 :(得分:1)

以下是各种DBMS支持的标准SQL:

select item, date, licence_plate_number
from (
    select item, date, licence_plate_number, 
           row_number() over (partition by licence_plate_number order by date desc as rn)
    from the_table
) t
where rn = 1
order by item;

使用窗口函数通常比使用聚合的自联接更快。

答案 2 :(得分:0)

也许这会有所帮助:

SELECT TOP 10 --change 10 to any desired number to be viewed 
*
FROM YourDatabaseName 
ORDER BY Date DESC

答案 3 :(得分:0)

您必须先找到每个牌号的最大日期,然后加入表格。

您可以使用以下查询。

1      2016-05-13      abc-123
2      2016-05-13      abc-123
3      2016-05-10      xyz-567
6      2016-05-10      xyz-567

此查询的输出将是。

409 Conflict