SQL在多个变量上使用日期和ID计算每日增量

SQL在多个变量上使用日期和ID计算每日增量,sql,Sql,我有一个具有以下结构的表: +----------+-----+-------+----------+ | Date | ID | Likes | Comments | +----------+-----+-------+----------+ | 1/1/2018 | AAA | 70 | 90 | | 1/2/2018 | AAA | 80 | 110 | | 1/1/2018 | BBB | 60 | 5 | | 1/2/20

我有一个具有以下结构的表:

+----------+-----+-------+----------+
| Date     | ID  | Likes | Comments |
+----------+-----+-------+----------+
| 1/1/2018 | AAA | 70    | 90       |
| 1/2/2018 | AAA | 80    | 110      |
| 1/1/2018 | BBB | 60    | 5        |
| 1/2/2018 | BBB | 90    | 6        |
+----------+-----+-------+----------+
对于每一天和ID,我需要计算增量值。所需的输出应如下所示:

我已经尝试过这段代码,但它一直将每日喜欢的内容或每日评论聚合在一起

SELECT
    "date",
    "created_time",
    ("likes_count" - LAG("likes_count", 1) OVER (ORDER BY "date")) AS "daily_likes",
    ("comments_count" - LAG("comments_count", 1) OVER (ORDER BY "date")) AS "daily_comments",
    "id",
    "likes_count",
    "comments_count",
    "user_username"
FROM 
    "blablabla"
GROUP BY 
    1,
    "id",
    "likes_count",
    "comments_count",
    "user_username",
    "created_time"
ORDER BY 
    1 DESC;

您发布的表结构与查询不匹配。我想知道你为什么要分组,更不用说几乎每一列和一个文字了

一个查询,它将从您发布的表中生成所需的输出,例如:

SELECT "date",
       "id",
       "likes",
       "comments",
       "likes"
       - lag("likes",
             1,
             0) OVER (PARTITION BY "id"
                      ORDER BY "date") "daily_likes",
       "comments"
       - lag("comments",
             1,
             0) OVER (PARTITION BY "id"
                      ORDER BY "date") "daily_comments"
       FROM "elbat"
       ORDER BY "date",
                "id";

根本不需要分组


(但是请注意,为了显示每天的增长,这需要源表为每个用户提供每天的数据。如果有间隙,则需要加入所有天数(在各自的范围内)供所有用户填写。

您发布的表结构与查询不匹配。我想知道为什么您要分组,更不用说几乎每一列和一个文本了

一个查询,它将从您发布的表中生成所需的输出,例如:

SELECT "date",
       "id",
       "likes",
       "comments",
       "likes"
       - lag("likes",
             1,
             0) OVER (PARTITION BY "id"
                      ORDER BY "date") "daily_likes",
       "comments"
       - lag("comments",
             1,
             0) OVER (PARTITION BY "id"
                      ORDER BY "date") "daily_comments"
       FROM "elbat"
       ORDER BY "date",
                "id";

根本不需要分组


(但是请注意,为了显示每天的增长,这需要源表为每个用户提供每天的数据。如果有间隙,则需要加入所有天数(在各自的范围内)供所有用户填写。

非常感谢@sticky bit。还有一个问题:代码正确地计算了今天与昨天。但是,当ID的第一天是喜欢或评论的第一天时,“daily_likes”(或“daily_comments”)是空的。如何编写第一个喜欢(或评论)呢在第一行而不是空白记录中?@Jerome:Use
lag()
和我一样,有三个参数。如果前一行不存在,则最后一个参数是默认值。除非您指定这样的默认值,否则将返回null。太好了!再次感谢您的时间和帮助。非常感谢@sticky bit。还有一个问题:代码正确计算了今天与昨天的值。但是,当它是第一天的时候r注释对于ID,“每日喜欢”(或“每日评论”)为空。如何才能将第一个喜欢(或评论)写在第一行而不是空白记录?@Jerome:Use
lag()
和我一样,有三个参数。如果前一行不存在,最后一个参数是默认值。除非您指定这样的默认值,否则将返回null。太好了!再次感谢您的时间和帮助。