【问题标题】:How to Group by 6 days in Postgresql如何在 Postgresql 中按 6 天分组
【发布时间】:2017-02-21 12:51:55
【问题描述】:

我想将这种类型的数据转换为 6Days GROUP BY 格式。

+-----+--------------+------------+
| gid |     cnt      |    date    |
+-----+--------------+------------+
|  1  |     1        | 2012-02-05 |
|  2  |     2        | 2012-02-06 |
|  3  |     1        | 2012-02-07 |
|  4  |     1        | 2012-02-08 |
|  5  |     1        | 2012-02-09 |
|  6  |     2        | 2012-02-10 |
|  7  |     3        | 2012-02-11 |
|  8  |     1        | 2012-02-12 |
|  9  |     1        | 2012-02-13 |
| 10  |     2        | 2012-02-14 |
| 11  |     3        | 2012-02-15 |
| 12  |     4        | 2012-02-16 |
| 13  |     1        | 2012-02-17 |
| 14  |     1        | 2012-02-18 |
| 15  |     1        | 2012-02-19 |
| 16  |    NULL      | 2012-02-20 |
| 17  |     6        | 2012-02-21 |
| 18  |    NULL      | 2012-02-22 |
+-----+--------------+------------+

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

日期是连续格式。

【问题讨论】:

  • 真的吗?纯文本的屏幕截图? meta.stackoverflow.com/questions/285551/…
  • 你能详细说明问题吗?
  • 这并不是真正的分组依据,因为您有被考虑两次的记录...例如 10-02-2012。
  • 复制粘贴文本,粘贴后标记,然后使用Ctrl+K将其更改为代码格式

标签: sql postgresql date group-by


【解决方案1】:

如果我理解正确,你需要这样的东西:

WITH x AS (SELECT date::date, (random() * 3)::int AS cnt FROM generate_series('2012-02-05'::date, '2012-02-22'::date, '1 day'::interval) AS date
) 
SELECT start::date,
       (start + '5 day'::interval)::date AS end,
       sum(cnt)
  FROM generate_series(
                (SELECT min(date) FROM x),
                (SELECT max(date) FROM x),
                '5 day'::interval
       ) AS start
  LEFT JOIN x ON (x.date >= start AND x.date <= start + '5 day'::interval)
 GROUP BY 1, 2 
 ORDER BY 1 

x 我模仿你的桌子。

【讨论】:

    猜你喜欢
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2012-10-16
    相关资源
    最近更新 更多