sqlite SQL;选择每组的最后一条记录[重复]

3vpjnl9f  于 2022-12-19  发布在  SQLite
关注(0)|答案(2)|浏览(140)
    • 此问题在此处已有答案**:

Select max value of each group(8个答案)
2天前关闭。
我的表如下所示:

id userid score
1 10 55
2 10 89
3 10 70
4 15 50
5 15 80
6 17 90
7 17 99

我需要这样一个SQL语句,它为每个userid选择LAST score

id userid score
3 10 70
5 15 80
7 17 99

有什么主意吗?谢谢
另外,我使用SQLite3

gpnt7bae

gpnt7bae1#

正如tidoss所提到的。某种窗口函数。这里有一个带行号的函数,假设你的id可以用来确定什么是“最后一个”

with t as
 (select m.*,
  row_number() over (partition by userid order by id desc) as rn
  from mytable m
)
select id, userid, score from t where rn = 1
brqmpdu1

brqmpdu12#

解决此问题的类似方法是,首先按userid的升序和id的降序对表进行排序,然后按外部useridinner选择的值进行分组
内部选择

SELECT inner.* FROM table AS inner ORDER BY userid ASC, id DESC;

会给予这个中间结果:

id  userid  score
--  ------  -----
3   10      70   
2   10      89   
1   10      55   
5   15      80   
4   15      50   
7   17      99   
6   17      90

userid对该结果进行分组将给予您想要的结果。

SELECT outer.* FROM 
  (SELECT inner.* FROM table AS inner ORDER BY userid ASC, id DESC) AS outer
GROUP BY outer.userid;

这将为您提供:

id  userid  score
--  ------  -----
3   10      70   
5   15      80   
7   17      99

相关问题