как оценить 3 наивысшее значение для каждой даты - PullRequest
0 голосов
/ 21 мая 2019

Я новичок в sqlite, пытаясь решить, как оценивать только 3 самых высоких значения для каждого дня

Таблица: цена

Дата |Имя |value1 |

21-08-2018 |A |100

21-08-2018 |Б |90

21-08-2018 |C |80

21-08-2018 |D |70

21-08-2018 |E |60

21-08-2018 |F |50

22-08-2018 |Б |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 |Б |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 |Б |90

21-08-2018 |C |80

22-08-2018 |Б |99

22-08-2018 |A |88

22-08-2018 |D |77

23-08-2018 |D |90

23-08-2018 |A |80

23-08-2018 |Б |70

я пытался выбрать *, max (значение1) из ценовой группы по (дате)

, но показать только одну строку, уже пытался использовать TOP3, но показать только 3 из лотов строки

1068 * спасибо

1 Ответ

0 голосов
/ 21 мая 2019

Если вы используете 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() только для трех максимум.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...