-1

我需要正确的 Oracle SQL 代码帮助来组合水晶报表命令对象的行。这是我正在处理的更大查询的一部分,并且在过去几天中被卡住了。

例如。如果列如下所示

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 和访问一个结果行,最小(In_time)和最大(Out_time)。访问(结果行)本身的时间跨度可能大于 48 小时。

对于此示例,对于 PatId 151,第一行的 out_time 和第二行的 In_time 之间的时间差小于 48 小时。第二行的 Out_time 和第三行的 In_time 以及第三行和第四行之间的时间差也小于 48 小时。在此之后,第 4 行的 Out_time 和第 5 行的 In_time 之间的差距大于 48 小时。PatId 151 的结果应如下所示,EmpId 167 的结果相同,链接应继续,直到发现大于 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

我无法获得有关如何比较和合并行的逻辑。

提前致谢, 阿比

4

1 回答 1

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

您需要检查您的示例和逻辑。我无法理解需要与什么进行比较...

于 2013-04-02T13:04:47.580 回答