如何为每个日期排列3个最高值

时间:2019-05-21 04:14:37

标签: sqlite

我是sqlite的新手,试图解决如何每天仅将3个最高价值排名

表:价格

日期|姓名| value1 |

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

我希望得到如下结果

日期|姓名| 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 | B | 70

我尝试过 选择*,最大(值1) 从价格 按(日期)分组

但仅显示一行,已经使用TOP3尝试过,但仅显示很多行中的3行,

谢谢

1 个答案:

答案 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()最多只能使用三行。