我需要帮助正确的Oracle SQL代码来组合crystal reports命令对象的行。这是我正在处理的更大查询的一部分,并在过去几天陷入困境。
例如。如果列如下所示
PatId In_time Out_time
151 01/01/2012 07:00:00 am 01/01/2012 10:00:00 am
151 01/01/2012 11:00:00 am 01/02/2012 08:00:00 am
151 01/02/2012 11:00:00 am 01/02/2012 01:00:00 pm
151 01/03/2012 08:00:00 am 01/03/2012 03:00:00 pm
151 01/06/2012 03:30:00 pm 01/09/2012 07:00:00 am
167 01/03/2012 01:30:00 pm 01/09/2012 07:00:00 am
167 01/13/2012 03:30:00 pm 01/14/2012 07:00:00 am
167 01/14/2012 11:30:00 am 01/15/2012 11:30:00 am
167 01/18/2012 12:00:00 pm 01/19/2012 03:00:00 am
在PatId中,代码应该将一行的Out_time与下一行的In_time进行比较,并检查时间间隔是否大于48小时。如果没有,那么它被认为是同一次访问的一部分。我想要每个PatID和一个结果行。访问,使用min(In_time)和max(Out_time)。访问的时间跨度(结果行)本身可能超过48小时。
对于该示例,对于PatId 151,第一行的out_time和第二行的In_time之间的时间差小于48小时。第二行的Out_time和第三行的In_time之间以及第3行和第4行之间的差异也小于48小时。在此之后,第4行的Out_time和第5行的In_time之间的间隔大于48小时。对于EmpId 167,PatId 151的结果应该如下所示,链接应该继续,直到找到大于48小时的间隙。
因此上表的结果应显示为
PatId In_time Out_time
151 01/01/2012 07:00:00 am 01/03/2012 03:00:00 pm
151 01/06/2012 03:30:00 pm 01/09/2012 07:00:00 am
167 01/03/2012 01:30:00 pm 01/09/2012 07:00:00 am
167 01/13/2012 03:30:00 pm 01/15/2012 11:30:00 am
167 01/18/2012 12:00:00 pm 01/19/2012 03:00:00 am
我无法获得如何比较和合并行的逻辑。
先谢谢,Abhi
答案 0 :(得分:0)
减去时间的一般示例 - 复制/粘贴以查看输出。此示例将为您提供两个日期之间的小时,分钟,秒的差异。基本公式是(end_date - start_date)* 86400(24小时内的秒数)......:
SELECT trunc(mydate / 3600) hr
, trunc(mod(mydate, 3600) / 60) mnt
, trunc(mod(mydate, 3600) / 60 /60) sec
FROM
(
SELECT (to_date('01/03/2012 10:00:00', 'mm/dd/yyyy hh24:mi:ss') -
to_date('01/01/2012 07:00:00', 'mm/dd/yyyy hh24:mi:ss')) * 86400 mydate
FROM dual
)
/
HR | MNT | SEC
---------------
51 | 0 | 0
您需要检查您的示例和逻辑。我无法理解什么需要与什么相结合......