我是sqlite的新手,试图解决如何每天仅将3个最高价值排名
表:价格
21-08-2018 | A | 100
21-08-2018 | B | 90
21-08-2018 | C | 80
21-08-2018 | D | 70
21-08-2018 | E | 60
21-08-2018 | F | 50
22-08-2018 | B | 99
22-08-2018 | A | 88
22-08-2018 | D | 77
22-08-2018 | C | 66
22-08-2018 | E | 55
22-08-2018 | F | 44
23-08-2018 | D | 90
23-08-2018 | A | 80
23-08-2018 | B | 70
23-08-2018 | C | 80
23-08-2018 | F | 70
23-08-2018 | E | 60
我希望得到如下结果
21-08-2018 | A | 100
21-08-2018 | B | 90
21-08-2018 | C | 80
22-08-2018 | B | 99
22-08-2018 | A | 88
22-08-2018 | D | 77
23-08-2018 | D | 90
23-08-2018 | A | 80
23-08-2018 | B | 70
我尝试过 选择*,最大(值1) 从价格 按(日期)分组
但仅显示一行,已经使用TOP3尝试过,但仅显示很多行中的3行,
谢谢
答案 0 :(得分:0)
如果您使用的是Sqlite 3.25或更高版本,则使用窗口函数可以轻松实现:
WITH ranked AS (SELECT date, name, value1
, rank() OVER (PARTITION BY date ORDER BY value1 DESC) AS rank
FROM price)
SELECT date, name, value1
FROM ranked
WHERE rank <= 3
ORDER BY date, rank;
给予
date name value1
---------- ---------- ----------
21-08-2018 A 100
21-08-2018 B 90
21-08-2018 C 80
22-08-2018 B 99
22-08-2018 A 88
22-08-2018 D 77
23-08-2018 D 90
23-08-2018 A 80
23-08-2018 C 80
如果有重复的value1
数字引起联系,则每个日期可能会返回三行以上-使用row_number()
代替rank()
最多只能使用三行。