我正在尝试编写一个视图,其中一列是业务逻辑,就像基于接收消息状态的SLA时差。
示例在下面..对于相同的MSG_GUID,我们有不同的PAYLOAD_TYPE,它们代表不同的消息状态,创建的时间显示它在DB中插入的时间。
对于所有消息,PayloadType = 1将始终位于DB中 在这里,对于相同的消息GUID,我将使用Payload_type = 2或3,但不能同时使用
MSG_GUID PAYLOAD_TYPE CREATED_TIME
------------------------------------- ------------ ----
5dd222f2175e14 1 02-MAY-14 04:22:11
5dd222f2175e14 2 02-MAY-14 04:28:11
5dd222f2175e14 3 02-MAY-14
或
MSG_GUID PAYLOAD_TYPE CREATED_TIME
------------------------------------- ------------ ----
5dd222f2175e14 1 02-MAY-14 04:22:11
5dd222f2175e14 2 02-MAY-14
5dd222f2175e14 3 02-MAY-14 04:28:11
现在,在我看来,我必须显示 SLATime,这将是Payload_type 1和2或1和3的时差。 ..这里messageGUID将保持相同...这样我将有100个记录。
有人可以告诉我如何编写SQL查询来实现这一目标。
预期结果 -
如果Payload_type 1和2可用于相同的MSG_GUID,那么
SLATime
-----------
0 HOURS 6 MINUTES 0 SECS (created time difference of Payload_type 1 and 2 row)
但是如果Payload_type 1和3可用于相同的MSG_GUID那么
SLATime
-----------
0 HOURS 6 MINUTES 0 SECS (created time difference of Payload_type 1 and 3 row)
答案 0 :(得分:0)
如果你想要与没有时间组件的created_time
不同,那么你需要这样的逻辑:
select msg_guid,
(max(case when payload_type = 1 then created_time end) -
(case when max(case when payload_type = 2 then created_time end) <>
trunc(max(case when payload_type = 2 then created_time end))
then max(case when payload_type = 2 then created_time end)
when max(case when payload_type = 3 then created_time end) <>
trunc(max(case when payload_type = 3 then created_time end))
then max(case when payload_type = 3 then created_time end)
end)
) as diff
from table t
group by msg_guid;
这会将结果作为一天的分数返回。