【问题标题】:How to aggregate event dates based on aggregated table?如何根据聚合表聚合事件日期?
【发布时间】:2023-02-04 03:40:22
【问题描述】:

我有一个表格,以下列格式聚合禁用/重新启用事件:

Disabled Date Enabled Date Count
01/01 01/01 5
01/01 02/01 2
03/01 05/01 1
04/01 05/01 5

并希望构建一个报告来汇总每天禁用和重新启用的数量:

Date Enables Disables
01/01 5 7
02/01 2 0
03/01 0 1
04/01 0 5
05/01 6 0

我能够构建以下查询,该查询适用于至少有一个禁用和一个启用的日子:

SELECT
  disables.disable_date AS disable_date, 
  disables.disable_count disable_count,
  enables.enable_count enable_count
FROM 
  (SELECT
    disable_date, 
    sum(disable_count) disable_count
    FROM table
  GROUP BY 1) AS disables,
    (SELECT
    enable_date, 
    sum(disable_count) enable_count
    FROM table
  GROUP BY 1) AS enables
WHERE enables.enable_date = disables.disable_date;

有什么建议如何构建完整的输出吗?我不确定这是正确的策略,因此也可以考虑加入。

谢谢!

【问题讨论】:

    标签: sql


    【解决方案1】:
    WITH CTE AS (
    SELECT
    Disabled_Date AS Date,
    SUM(Count) AS Disables
    FROM table1
    GROUP BY Disabled_Date
    UNION ALL
    SELECT
    Enabled_Date AS Date,
    SUM(-Count) AS Disables
    FROM table1
    GROUP BY Enabled_Date
    )
    SELECT
    CTE.Date,
    COALESCE(SUM(CASE WHEN CTE.Disables > 0 THEN CTE.Disables END), 0) AS Enables,
    COALESCE(SUM(CASE WHEN CTE.Disables < 0 THEN -CTE.Disables END), 0) AS Disables
    FROM CTE
    GROUP BY CTE.Date
    ORDER BY CTE.Date;
    

    测试

    http://sqlfiddle.com/#!18/13cace/3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 2013-06-06
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多