2016-05-13 103 views
1

我想创建一个SQL查询,我只能查看最新的货件。目前我得到以下结果。用于获取最新数据的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 
+1

你使用的是什么dbms? –

+0

定义“最新”,然后我们可以帮助你。项目3包括什么,但项目6被排除? – Andreas

+0

您正在使用哪些DBMS? –

回答

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的最后日期。使用这个派生表,我们可以选择与这个日期相对应的记录。

0

也许这会有所帮助:

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

不是OP要求的。 (并且产品特定的答案是不带dbms标签的问题。) – jarlh

0

你必须先找到我们每个车牌号码的最大日再加入表。

您可以使用下面的查询。

select t2."item",t1."date",t1."licence plate number" from (
(select max("date") as date, "licence plate number" from Table_1 group by 
"licence plate number")) t1 
left join Table_1 t2 
on (t1."date" = t2."date" and t1."licence plate number" = t2."licence plate number") 

此查询的输出将是。

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

请注意,分隔标识符的方括号是特定于产品的,并且问题没有标记dbms。 ANSI SQL有双引号,例如' “项目”'。 (MS SQL Server实际上支持这两个版本。) – jarlh

+0

感谢bro .. @jarlh –

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; 

使用窗函数通常快于自与集料加入。