【发布时间】:2015-02-10 18:32:49
【问题描述】:
我有以下提到的数据。我正在寻找最小的开始消息和相应的最小成功消息。如果没有开始或成功消息,那么它应该显示为 null。
启动消息表ID1 Timestamp_start_msg_recieved date jobid message time in seconds
1234 5/14/2014 10:02:29 5/14/2014 abc start 262
1234 5/14/2014 10:02:31 5/14/2014 abc start 264
1234 5/14/2014 10:02:45 5/14/2014 abc start 278
1234 5/14/2014 10:02:50 5/14/2014 abc start 285
1234 5/14/2014 10:09:04 5/14/2014 abc start 165
1234 5/14/2014 10:09:06 5/14/2014 abc start 2167
1234 5/14/2014 10:09:16 5/14/2014 abc start 2180
1234 5/14/2014 10:09:26 5/14/2014 abc start 2190
1234 5/14/2014 11:45:11 5/14/2014 abc start 8767
1234 5/14/2014 16:48:20 5/14/2014 abc start 878
1234 5/14/2014 19:02:52 5/14/2014 abc start 687
5678 5/14/2014 22:02:52 5/14/2014 pqr start 501
5678 5/14/2014 23:10:40 5/14/2014 abcd start 200
成功消息表
ID1 Timestamp_success_msg_recieved date jobid message time in seconds
1234 5/14/2014 10:02:52 5/14/2014 abc successful 290
1234 5/14/2014 10:09:32 5/14/2014 abc successful 4280
1234 5/14/2014 11:45:15 5/14/2014 abc successful 8774
1234 5/14/2014 11:45:18 5/14/2014 abc successful 8777
1234 5/14/2014 11:45:19 5/14/2014 abc successful 8778
1234 5/14/2014 11:45:25 5/14/2014 abc successful 8784
1234 5/14/2014 16:48:22 5/14/2014 abc successful 880
1234 5/14/2014 19:03:00 5/14/2014 abc successful 699
5678 5/14/2014 22:03:00 5/14/2014 pqr successful 250
5678 5/19/2014 14:00:16 5/19/2014 pqr successful 400
预期结果
ID1 IMESTAMP_for_start_message TIMESTAMP_for_success_message Date Jobid msg msg start_secs success_secs
1234 5/14/2014 10:02:29 5/14/2014 10:02:52 5/14/2014 abc start success 262 290
1234 5/14/2014 10:09:04 5/14/2014 10:09:32 5/14/2014 abc start success 165 4280
1234 5/14/2014 11:45:11 5/14/2014 11:45:25 5/14/2014 abc start success 8767 8784
1234 5/14/2014 16:48:20 5/14/2014 16:48:22 5/14/2014 abc start success 878 880
1234 5/14/2014 19:02:52 5/14/2014 19:03:00 5/14/2014 abc start success 687 699
5678 5/14/2014 22:02:52 5/14/2014 22:03:00 5/14/2014 pqr start success 501 699
5678 5/14/2014 23:10:40 null 5/14/2014 abcd start success 250 null
5678 null 5/19/2014 14:00:16 5/19/2014 pqr null success null 400
我试图将 start_timestamp 的 Min 与与 id1 和 jobid 对应的 success_timestamp 的下一个 Min 结合起来。如果对于给定的 id1 和 jobid 有一个启动消息列表并且没有成功消息,那么它应该显示 NULL,反之亦然。尝试使用 WITH 子句使用临时表,还使用了自连接方法。下面是我的查询,但是 WITH 子句查询返回表中全部数据的 MIN。
使用的查询:
WITH DATA AS
(SELECT MIN(smt.column13) timestamp_for_success_message
FROM success_table1 smt, start_table2 b
WHERE
(SMT.id1 = b.id1)
AND (SMT.jobid = b.jobid)
AND (SMT.timestamp_for_success_message_recieved >= b.timestamp_for_start_message_recieved)
)
SELECT distinct a.timestamp_for_success_message_recieved,
b.timestamp_for_start_message_recieved,
b.id1,
b.jobid
FROM data a,
start_table2 b
order by b.timestamp_start_message_recieved, a.timestamp_for_success_message_recieved, b.jobid, b.id1;
【问题讨论】:
-
我不明白您是如何将您的开始消息表与您的成功消息表联系起来的?但是,显然,通过 ID1,您正在(以某种方式)将 10:02:29 记录与 10:02:52 联系起来?为什么 ?如果你只使用jobid,它仍然会拾取太多。您需要解释加入规则的业务逻辑......并解释为什么 5678 个规则会分裂 - 因为它们“相距太远”? (即“太远”有多远)
-
我正在根据 id1 和 jobid 拆分数据。基于每个 id1 和 jobid 我需要找到最小的启动消息,直到成功消息被命中,反之亦然。给定 id1 和 jobid 会有多个启动消息和/或成功消息。
-
ok .. 那么为什么你想查看记录“5678”,开始时间为“23:10:40”,但找不到匹配的结束日期,但你不想看到当其他结束时间被吞噬时,记录“1234”和开始时间“10:02:31”?
-
哦,我现在明白你在说什么了,我现在已经编辑了这个问题。这将是一个不同的jobid,现在显示为null。在按升序排序并根据 id1 和 jobid 进行匹配后,我正在寻找启动和成功消息的组合。如果单个成功消息有多个启动消息,反之亦然,我想抓住 MIN(start msg) 和 MIN(success msg) 组合。如果出于任何原因没有启动条目或成功消息,我想将其记录为 null
-
回答或计划回答此问题的读者应注意它是asked again several hours later here。
标签: sql oracle oracle11g oracle-sqldeveloper