根据其他列选择值

时间:2020-07-08 11:25:47

标签: sql

我很困在这里。我有这张桌子:

  Name  |  Value   |  Date    
------------------------------   
  A     |  Active  | 2020-08-07    
  A     | Inactive | 2020-08-06    
  A     |  Active  | 2020-08-05   
  B     | Inactive | 2020-08-06    
  B     |  Active  | 2020-08-01    
  C     |  Active  | 2020-08-02

我只想为每个名称选择最新记录(基于日期)

  Name  |  Value   |  Date    
------------------------------    
  A     |  Active  | 2020-08-07    
  B     | Inactive | 2020-08-06    
  C     |  Active  | 2020-08-02

能帮我吗?

1 个答案:

答案 0 :(得分:1)

一种简单的方法使用相关子查询:

select t.*
from t
where t.date = (select max(t2.date) from t t2 where t2.name = t.name);

使用(name, date)上的索引,它通常具有非常好的性能。

另一种适用于许多数据库的方法是row_number()

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