简体   繁体   English

sql多列按最新过滤重复项

[英]sql multiple columns filtering duplicates by newest

I have a SQL query (sqlight3) that gives me tripels (name, value, date) of data. 我有一个SQL查询(sqlight3),可为我提供三重数据(名称,值,日期)。

select name, value, date from
"different things and conditions"
order by date desc

The result ist sorted by date and looks like this: 结果ist按日期排序,如下所示:

name | value | date
-------------------
a    | x     | 2015
b    | y     | 2014
a    | z     | 2013
b    | x     | 2012
c    | y     | 2011

Now I want the results filtered, so that every name is unique and I only get the newest (by date) triples. 现在,我希望对结果进行过滤,以便每个名称都是唯一的,并且我只会获得最新的(按日期)三元组。 I expect the result 我期待结果

name | value | date
-------------------
a    | x     | 2015
b    | y     | 2014
c    | y     | 2011

How can I achieve this? 我该如何实现?

Most databases support ANSI standard window functions, so this can be done using row_number() : 大多数数据库支持ANSI标准窗口函数,因此可以使用row_number()来完成:

select name, value, date
from (select t.*,
             row_number() over (partition by name order by date desc) as seqnum
      from . . .
     ) t
where seqnum = 1;

EDIT: 编辑:

MySQL doesn't support row_number() . MySQL不支持row_number() Here is another method: 这是另一种方法:

select name,
       substring_index(group_concat(value order by date desc), ',', 1) as value
       max(date) as date
from . . .
group by name;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM