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 - 按类别分组,日期范围[重复]的主要内容,如果未能解决你的问题,请参考以下文章