sql多列过滤最新的重复项

时间:2015-02-05 12:44:25

标签: mysql sqlite filter tuples multiple-columns

我有一个SQL查询(sqlight3),它为我提供了数据的tripels(名称,值,日期)。

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

结果按日期排序,如下所示:

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

现在我希望过滤结果,以便每个名称都是唯一的,我只获得最新的(按日期)三元组。我期待结果

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

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

大多数数据库都支持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;

编辑:

MySQL不支持row_number()。这是另一种方法:

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