Я пытаюсь вычислить разницу между каждой строкой, каждая из которых имеет определенный атрибут. Например, у меня есть недельное игровое время в трех играх (RDR2, GTA5, Spyro), и я подсчитал, какой процент каждого дня тратится на каждую игру, и я хочу увидеть, какое процентное изменение происходит изо дня в день.
Поэтому я написал:
percent - LAG(percent, 1) OVER (PARTITION BY game ORDER BY time DESC) AS games_delta
но вместо получения желаемого результата:
|-------------------------------|
| TIME GAME PERCENT DELTA |
|-------------------------------|
| Dec 10 RDR2 25 15 |
| Dec 10 GTA5 50 40 |
| Dec 10 Spyro 25 -55 |
| Dec 9 RDR2 10 -22 |
| Dec 9 GTA5 10 10 |
| Dec 9 Spyro 80 13 |
| Dec 8 RDR2 33 ...
| Dec 8 GTA5 0 ...
| Dec 8 Spyro 67 ...
Я получаю множественность игр и совершенно не прав game-delta
!:
|-------------------------------|
| TIME GAME PERCENT DELTA |
| Dec 10 RDR2 25 2 |
| Dec 10 RDR2 25 4 |
| Dec 10 RDR2 25 -4 |
| Dec 10 RDR2 25 4 |
| Dec 10 GTA5 10 5 ...
Какие-либо предложения? Заранее спасибо!
Изменить:
SELECT time,
game,
percent,
games_delta
Еще у меня в GROUP BY
и ORDER BY
есть следующее:
GROUP BY time, game, percent, games_delta
ORDER BY time DESC
Изменить 2:
Вот мой CTE:
cte_table4 (time, games_delta) AS
(
SELECT time,
percent - LAG(percent, 1) OVER (PARTITION BY game ORDER BY time DESC) AS games_delta
FROM cte_table3
)
GROUP BY
) в CTE (Common Table Expression). Затем вы можете использоватьLAG()
в качестве второго шага. Опубликуйте все избранные, если сможете, и я могу помочь. ИспользованиеLAG()
перед группировкой приведет к этим странным вычислениям. - person The Impaler   schedule 21.12.2018SELECT
в моем первом редактировании находился в основной части моего запроса. В моем CTE мне нечегоGROUP BY
или, как мне кажется, это действительно нужно? - person davviid   schedule 21.12.2018GROUP BY
в предыдущем CTEcte_table3
, прежде чем попытаться использоватьLAG()
- person davviid   schedule 21.12.2018cte_table4
, что иLAG()
, и это сработало! Спасибо за предложение переместитьGROUP BY
в CTE! - person davviid   schedule 21.12.2018