найти всего пять дней группы с нерегулярными интервалами. с SQLite - PullRequest
0 голосов
/ 11 марта 2020

фиктивная таблица

days| val
-----------
1   | 1
-----------
2   | 3
-----------
4   | 2
-----------
5   | 1
-----------
6   | 6
-----------
8   | 2
-----------
11  | 5
-----------
12  | 4
-----------

мы хотим найти сумму val столбец следующих 5 дней подряд

Ожидаемый результат

days| val   | tot
-----------------
1   | 1     | 7
-----------------
2   | 3     | 12
-----------------
4   | 2     | 11
-----------------
5   | 1     | 9
-----------------
6   | 6     | 8
-----------------
8   | 2     | 11    
-----------------
11  | 5     | 9
-----------------
12  | 4     | 4 
-----------------

Я пытался написать оконную функцию с предложением кадра, но опция строк принимает смещение без строк, но хочет смещение со значением дней. это может быть возможно с параметром range в предложении frame, но SQLITE дает только неограниченную и текущую строку в качестве опции, а не пользовательский

, не находящий альтернативы любой намек или решение поможет.

что я пробовал

select days,val,sum(val) over ( order by days rows between current row and 5 following) tot from table_name

1 Ответ

0 голосов
/ 11 марта 2020

Тривиально, чтобы сделать с довольно свежей версией sqlite (3.28 или новее), используя оконную функцию с диапазоном спецификация фрейма :

SELECT days, val
     , sum(val) OVER (ORDER BY days RANGE BETWEEN CURRENT ROW AND 4 FOLLOWING) AS tot
FROM dummy
ORDER BY days;

дает

days        val         tot       
----------  ----------  ----------
1           1           7         
2           3           12        
4           2           11        
5           1           9         
6           6           8         
8           2           11        
11          5           9         
12          4           4   

См. Пример db fiddle .

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