【问题标题】:Postgresql: count records by time intervalsPostgresql:按时间间隔计算记录
【发布时间】:2015-11-06 23:08:36
【问题描述】:

我正在尝试将以下 SQL 语句与 postgresql 一起使用来生成一些报告:

WITH GRID AS (
  SELECT START_TIME, LEAD(START_TIME) OVER (ORDER BY START_TIME) AS END_TIME 
  FROM  (
    SELECT GENERATE_SERIES('2015-08-01 12:00:00', '2015-09-01 12:00:00',  INTERVAL '1 day') AS START_TIME 
    FROM   MY_TABLE
    ) x
  )
  SELECT 
    START_TIME, COUNT(MY_TABLE._ID) AS COUNT 
    FROM
      GRID 
      LEFT   JOIN MY_TABLE ON MY_TABLE.CREATED >= GRID.START_TIME AND MY_TABLE.CREATED <  GRID.END_TIME  
    WHERE MY_TABLE.COMPANY_ID = '1001'  AND MY_TABLE.CUSTOMER_ID = '1003' 
    GROUP  BY 1 ORDER  BY 1

我的预期会是这样的:

  • "2015-08-01 12:00:00+02"; 0
  • "2015-08-02 12:00:00+02"; 1
  • "2015-08-03 12:00:00+02"; 0
  • "2015-08-04 12:00:00+02"; 1
  • "2015-08-05 12:00:00+02"; 0
  • ....
  • "2015-08-31 12:00:00+02"; 0

但实际结果是:

  • "2015-08-02 12:00:00+02";1
  • "2015-08-04 12:00:00+02";1

它只是跳过计数为 0 的记录。

如果我不指定 where 子句(条件部分),我可以得到预期的结果。

谁能帮帮我?

谢谢!

【问题讨论】:

    标签: postgresql join count report


    【解决方案1】:

    以下查询似乎做你想做的事:

    WITH GRID AS
    (
      SELECT 
        START_TIME,
        LEAD(START_TIME) OVER (ORDER BY START_TIME) AS END_TIME
      FROM
      (
        SELECT 
          GENERATE_SERIES('2015-08-01 12:00:00', '2015-09-01 12:00:00', INTERVAL '1 day') AS START_TIME
        FROM MY_TABLE 
      ) x 
    )
    SELECT 
      START_TIME,
      COUNT(MY_TABLE._ID) AS COUNT
    FROM GRID
    LEFT JOIN MY_TABLE ON 
      MY_TABLE.CREATED >= GRID.START_TIME AND 
      MY_TABLE.CREATED < GRID.END_TIME AND 
      MY_TABLE.COMPANY_ID = '1001' AND 
      MY_TABLE.CUSTOMER_ID = '1003'
    GROUP BY 1
    ORDER BY 1
    

    【讨论】:

    • 太棒了!非常感谢!它就像一个魅力。因此,如果我在 where 子句中包含条件,它似乎不会包含计数为 0 的这些项目。
    • 是的。这就是where 条件的工作原理——最终输出中的所有内容都必须满足它们,而left join 条件将数据添加到输出中,但如果没有找到数据,不会导致行从输出中隐藏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    相关资源
    最近更新 更多