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:Uselag()
和我一样,有三个参数。如果前一行不存在,最后一个参数是默认值。除非您指定这样的默认值,否则将返回null。太好了!再次感谢您的时间和帮助。