sql-显示分组值从一个组到另一个组的变化(取决于时间)

zqdjd7g9  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(222)

我创建了一个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
cnh2zyt3

cnh2zyt31#

VIEW ,无需使用 WITH 第二个呢 SELECT . 只需做第一件事 SELECT .
对于“变化”,不用费心 WITH ,而不是使用 LAG .

相关问题