【发布时间】:2016-09-26 09:36:53
【问题描述】:
感谢我的一个朋友,我已经能够获得以下代码,它可以根据 30 分钟的差异计算日期/时间。如果差异小于 30 分钟,则计数保持不变,否则如果大于计数,则增加 1。
SELECT
CASE
WHEN DATE2 - LAG(DATE2) over (PARTITION BY NAME, TRUNC(DATE2) ORDER BY DATE2) <= 1 / 48
THEN NULL
ELSE 1
END AS COUNT1
FROM TABLE1
我忘记要求他包括的是已计为该计数的开始时间和结束时间的值,因为这可以让我计算花费了多长时间,但我不确定如何添加这个基于上面的代码,所以没有尝试任何东西。
如果有人能建议我如何带来这样的东西,我将不胜感激,因为 sql 不是我的强项。
以下是一些示例数据:
NAME | DATE2
Humpty Dumpty | 21-JUL-16 09:27:24
Humpty Dumpty | 21-JUL-16 09:27:24
Humpty Dumpty | 21-JUL-16 09:27:24
Humpty Dumpty | 21-JUL-16 09:27:24
Humpty Dumpty | 21-JUL-16 09:31:31
Humpty Dumpty | 21-JUL-16 09:31:31
Humpty Dumpty | 21-JUL-16 09:31:31
Humpty Dumpty | 21-JUL-16 09:31:31
Humpty Dumpty | 21-JUL-16 16:42:03
Humpty Dumpty | 21-JUL-16 16:42:03
Humpty Dumpty | 21-JUL-16 16:42:03
Humpty Dumpty | 21-JUL-16 16:42:03
当我运行上述查询时,我得到以下信息:
Count1
1
(null)
(null)
(null)
(null)
(null)
(null)
(null)
1
(null)
(null)
(null)
这给了我一个值,但我还需要知道第一个值是什么时候计算的 1,以及计算下一个值之前的最后一个值。
从上面我的结果应该是这样的:
Count1 | Start_time | End_Time
1 | 21-JUL-16 09:27:24 | 21-JUL-16 09:31:31
1 | 21-JUL-16 16:42:03 | 21-JUL-16 16:42:03
需要指出的是,如果半小时内同一日期还有另一个值,那么开始时间也是结束时间..
【问题讨论】:
-
你也可以显示一些示例数据吗?这将使您的问题(以及任何答案)对可能面临类似问题的其他人更有用。
-
@TimBiegeleisen - 您可以在 OTN 上找到示例数据,几天前提出了原始问题。 community.oracle.com/thread/3974725
-
@mathguy 感谢您的侦探工作,但问题至少应该在这里直接包含一些示例数据。
-
@TimBiegeleisen - 没有侦探工作,真的;我相信 OP 显示的实际上是我在该线程中给出的答案 :-) 我同意,但 OP 应该在此处提供示例数据。
-
“你的朋友”给你的答案与你上一个问题的the answer I posted 相当接近。你不应该以这种方式浪费人们的善意。表现不佳