【问题标题】:sql multiple columns filtering duplicates by newestsql多列按最新过滤重复项
【发布时间】:2026-01-28 01:10:01
【问题描述】:

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

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

我怎样才能做到这一点?

【问题讨论】:

  • 请用您正在使用的数据库标记您的问题。
  • 用 mysql 标记它,谢谢。
  • 注意到这是错误的,抱歉。意思是 sqlight3。

标签: mysql sqlite filter tuples multiple-columns


【解决方案1】:

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

【讨论】:

  • mysql3 好像不支持 "row_number()" 和 "parition",抱歉。
  • 抱歉,您是否也对 sqlight3 有所了解? Substring_index 在那里不存在。