我创建了一个sql视图,它按1分钟的间隔分组:
CREATE VIEW `summary` AS
WITH shops AS (
SELECT
shop,
timestamp DIV 1000000 DIV 60 AS timestamp,
SUM(amount) AS sum_amount
FROM
products
GROUP BY timestamp DIV 1000000 DIV 60, shop
)
SELECT * FROM shops
现在我还想有一个领域,给我的变化 sum_amount
从上一个分组行/间隔。”前一组”指具有下一个较低时间戳的组。
我试着再加一个 WITH
声明并从两个子查询中选择:
previous_group AS
(
SELECT
s2.sum_amount AS previous_sum_amount
FROM
shops s1, shops s2
WHERE
s2.timestamp + (1000000 * 60) = s1.timestamp
)
SELECT
shop,
timestamp,
sum_amount,
sum_amount / previous_sum_amount AS change
FROM
shops, previous_group
但是,此查询将永远运行。如何实现在 sum_amount
从一个时间间隔到下一个时间间隔?
谢谢您。
编辑:删除 previous_group
并用 LAG
Windows功能-感谢里克·詹姆斯。
SELECT
shop,
timestamp,
sum_amount,
sum_amount / LAG(sum_amount, 1) OVER (PARTITION BY shop ORDER BY timestamp DESC) AS change
FROM
shops, previous_group
1条答案
按热度按时间cnh2zyt31#
在
VIEW
,无需使用WITH
第二个呢SELECT
. 只需做第一件事SELECT
.对于“变化”,不用费心
WITH
,而不是使用LAG
.