Oracle - 按类别分组,日期范围[重复]

Posted

技术标签:

【中文标题】Oracle - 按类别分组,日期范围[重复]【英文标题】:Oracle - grouping by category, range of dates [duplicate] 【发布时间】:2017-05-26 11:11:11 【问题描述】:

我有问题。我想根据图像中的数据编写oracle查询数据库

将创建结果:

START_DATE         |END_DATE           |COLOR
-------------------|-------------------|------
2017-05-25 15:39:39|2017-05-25 15:41:06|GREEN
2017-05-25 15:41:06|2017-05-25 15:53:27|ORANGE
2017-05-25 15:53:27|2017-05-25 15:57:16|GREEN
2017-05-25 15:57:16|2017-05-25 15:59:24|YELLOW

等等……

【问题讨论】:

请将数据发布为格式化文本,not screenshots。另外,到目前为止,您尝试过什么? 【参考方案1】:

您正在尝试查找相邻的值。一种方法使用不同的行号:

select min(start_date) as start_date, max(start_date) as end_date, color
from (select t.*,
             row_number() over (order by start_date) as seqnum,
             row_number() over (partition by color order by start_date) as seqnum_c
      from t
group by (seqnum - seqnum_c), color;

解释为什么行号的差异会起作用有点挑战性。我鼓励您运行子查询并盯着数字。您应该能够看到为什么相邻颜色值的差异是恒定的。

【讨论】:

这种技术被称为tabibitosan 而不是无数次回答同一个问题 - 下次您可以回顾以前的答案并找到重复的问题并将问题标记为此类。 参考您的回答,有问题。我没有像结束日期这样的东西,在数据库中我只有关于开始日期的记录。我在两行之间做出区别(滞后),看看在机器上制作一些细节需要多长时间。另外,“分组依据”是对整个查询还是只选择“t”? @karolina.ss 看起来像 Gordon 错字,应该是 max(start_date)。 group by 适用于外部查询;由于分析函数 (row_number() over ..),您无法在内部子查询中执行此操作。 @Boneist,感谢您的解释。使用 Gordon Linoff 示例,我有数据:START_DATE| END_DATE|颜色 ------ | ------ | ------ 2017-05-25 17:19:11| 2017-05-25 17:31:42|绿色 2017-05-25 17:38:20| 2017-05-25 18:01:00|绿色 2017-05-25 14:12:10| 2017-05-25 14:12:10|黄色 2017-05-25 18:22:34| 2017-05-25 19:02:56| GREEN 由于间隔,它是不正确的。我希望结束日期成为下一行的开始日期。表示:开始|结束|彩色 2017-05-25 14:01:25|2017-05-25 14:07:39|绿色 2017-05-25 14:07:39|2017-05-25 14:12 :10|黄色

以上是关于Oracle - 按类别分组,日期范围[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 LINQ 中按特定列分组 [重复]

在 BigQuery 中获取不同时间范围内的唯一类别

计算日期范围内的星期六和星期日的数量 - oracle [重复]

使用r(dplyr)对类别和日期求和[重复]

oracle中怎么按每小时分组。数据如下:

oracle怎么按个数分组