используя оконную функцию lag () для вычисления процентного изменения - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь вычислить разницу между каждой строкой, каждая из которых имеет определенный атрибут.Например, у меня есть время игры в три игры (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
)

1 Ответ

0 голосов
/ 21 декабря 2018

Добавление агрегации GROUP BY в того же CTE, что и LAG(), решит проблему

...