【问题标题】:Grouping date ranges together将日期范围分组在一起
【发布时间】:2021-08-16 02:37:39
【问题描述】:

我正在尝试将日期范围分组在一起,以便按批处理作业对报告进行排序。但是,批次 ID 可能每年重复两次,因此我必须按日期和批次 ID 分组。我的困境是我无法获得批次 ID 的范围

假设我有这些日期值

1/1/2021
5/1/2021
8/1/2021
3/7/2020
4/2/2019

我想得到

8/12/2020 - 8/1/2021
3/6/2020 - 3/7/2020
4/1/2019 - 4/2/2019

第一次在 Stack Overflow 和移动设备上寻求帮助。原谅格式

【问题讨论】:

  • 这似乎是一个类似的问题:stackoverflow.com/questions/7616860/…
  • 我正在尝试每月分组一次,而他只有 2 天。另外,我似乎无法将日期时间用作数据类型
  • 我完全不知道结果集与样本数据有什么关系。日期已定。你说某事一年发生一两次,然后 2021 年有三行。非常混乱。
  • 给定的日期数据好像是day/month/year的形式,开始day/month/year是根据每个组中最后一个day/month/year通过MAX(x) - INTERVAL '1' MONTH计算出来的。所以这对是MAX(x) - INTERVAL '1' MONTH to MAX(x)
  • 我怀疑所需的结果会导致问题,只需从该月找到的MAX(x) 中减去1 MONTH,导致与上个月的实际日期重叠。我的建议是只使用每个月组的开始和结束作为对或类似的东西。

标签: sql group-by oracle-sqldeveloper


【解决方案1】:

来自your comment

我正在尝试每月分组一次

然后使用GROUP BY TRUNC(date_column) 分组为日历月。

SELECT batch_id,
       TRUNC(date_column) AS month,
       SUM(your_other_column) AS other_column_total
FROM   table_name
GROUP BY TRUNC(date_column);

如果您想按不同的范围进行分组,即从本月 8 日到下个月 7 日,请使用偏移量:

SELECT batch_id,
       TRUNC(date_column - INTERVAL '7' DAY) AS month_from_8th,
       SUM(your_other_column) AS other_column_total
FROM   table_name
GROUP BY TRUNC(date_column - INTERVAL '7' DAY);

如果您想按其他方式分组,则需要定义如何计算分组范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 2021-11-16
    • 2014-02-28
    • 2020-11-09
    • 2013-05-19
    相关资源
    最近更新 更多