mysql - SQL:在同一个表中查找重复计数、添加的新值和删除的值(动态)

标签 mysql sql sql-server

我希望使用 SQL 完成以下目标:

1) 查找重复记录数
根据“快照日期”列提取重复值的数量,并将其与上一个日期进行比较
2) 查找添加的记录数
3) 查找删除的记录数

请参阅下面的示例表格:

当前表

snapshot_date | unique ID
 2018-08-15        1
 2018-08-15        2
 2018-08-15        3
 2018-08-15        4
 2018-08-15        5

 2018-08-16        1
 2018-08-16        3
 2018-08-16        4
 2018-08-16        6
 2018-08-16        7
 2018-08-16        8
 2018-08-16        9

 2018-08-17        3
 2018-08-17        8
 2018-08-17        10
 2018-08-17        11
 2018-08-17        12
 2018-08-17        13

需要的表

snapshot date | count | # of dupe from previous date | sum of ID added | sum of ID removed
 2018-08-15       5                 N/A                     N/A                  N/A 
 2018-08-16       7                  3                       4                    2
 2018-08-17       6                  2                       4                    5

如果有人知道到达所需餐 table 的脚本,我将不胜感激!提前谢谢你们!

最佳答案

这是我的看法。基于SQL Server

SELECT  snapshot_date       = COALESCE(c.snapshot_date, DATEADD(day, 1, p.snapshot_date)),
        [count]             = COUNT(c.snapshot_date),
        dup_from_prev_day   = SUM(CASE WHEN c.snapshot_date is not null 
                                       AND  p.snapshot_date is not null 
                                       THEN 1 END),
        sum_of_id_added     = SUM(CASE WHEN c.snapshot_date is not null 
                                       AND  p.snapshot_date is null 
                                       THEN 1 END),
        sum_of_id_removed   = SUM(CASE WHEN c.snapshot_date is null 
                                       AND  p.snapshot_date is not null 
                                       THEN 1 END)
FROM    yourTable c         -- current
        FULL OUTER JOIN yourTable p -- previous
        ON  c.snapshot_date     = DATEADD(DAY, 1, p.snapshot_date)
        AND c.uniqueID          = p.uniqueID
GROUP BY COALESCE(c.snapshot_date, DATEADD(DAY, 1, p.snapshot_date))
HAVING COUNT(c.snapshot_date) > 0

/* RESULT : 
snapshot_date  count  dup_from_prev_day  sum_of_id_added  sum_of_id_removed
2018-08-15     5      NULL               5                NULL
2018-08-16     7      3                  4                2
2018-08-17     6      2                  4                5
*/

关于mysql - SQL:在同一个表中查找重复计数、添加的新值和删除的值(动态),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51868812/

相关文章:

mysql SUM(值) 其中 SUM(值) > 2500

sql - Linq 自连接组合键

SQL 服务器 : Where clause inside IF .。别的

php - 从数据库获取描述等文本时如何创建边距

MYSQL 使用 SUM 时间选择查询

mysql - 这个 MySQL 语法有什么问题吗?

sql - WHERE 子句中的 PostgreSQL 多元组选择

通过相关性排序按多个标签搜索的 SQL 查询

sql-server - SQL 查询合并为一行

java - 无法使用 JDBC 连接到 Sql Server 数据库