3

我的目标是在一列上使用 distinct 但返回所有列。

我的桌子是这样的

id, name, year

1, John, 2012

2, Jake, 2012

3, Jenna, 2013

1, John, 2013

我需要对 id 列进行区分并返回所有三列以及不同的 id,我需要最近的记录。

我需要的输出是

id, name, year

1, John, 2013

2, Jake, 2012

3, Jenna, 2013

我试过这两个命令

  1. 从 sampletable 中选择不同的 id、name、year。我会在所有行上做不同的。

  2. select * from sampletable group by id 我只会返回 id 列并删除其他列。

4

2 回答 2

1

使用窗口和分析函数,您可以按年份排序的 id 对数据进行分区,并选择第一个结果:

SELECT id, name, year
FROM 
 (SELECT id, name, year, row_number() over (partition by id order by year desc) as r 
  FROM sampletable) S 
WHERE S.r = 1;

此外,还有其他排名功能,例如rankdense_rank用于不同的选择。

于 2013-10-14T15:37:52.043 回答
0

没有解析函数

    从 t 中选择 t.id、t.name、t.year
    加入
      (select id, max(year) year from t group by id) as S
      在 S.id=t.id 和 S.year = t.year

;

于 2014-01-19T11:39:35.503 回答