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