我有一个来自IVR的包含唯一呼叫ID,序列号,事件代码和事件描述的表。我想写一个查询,让我知道在特定事件之前事件是什么。任何帮助,将不胜感激。DB2 SQL查询识别在某个特定事件之前发生的事件
回答
根据表上存在的索引,直接的内部联接可能会从查询优化器接收更好的访问计划。
SELECT n.call_id,
n.event_dt,
n.sequence_number,
p.call_id as prior_call_id,
p.event_id as prior_event_id,
p.event_dt as prior_event_dt,
p.sequence_number as prior_sequence_number
FROM daily_events n
INNER JOIN daily_events p
ON p.sequence_number = n.sequence_number - 1
WHERE n.event_id = '5047'
AND n.event_dt >= DATE('01/06/2012')
AND n.event_dt <= DATE('01/07/2012');
查询假定与由一个不同的序列号的任何事件是一个适当的匹配,并且该CALL_ID并不还需要匹配。如果该假设不正确,则 然后将AND n.call_id = p.call_id
添加到联接的ON子句中。
我没有使用BETWEEN,因为它过去(并且可能)会导致比两个有界比较更昂贵的计划。 – 2012-01-09 22:11:09
这工作!感谢Fred!并感谢您添加有关call_id的信息。这很重要。 – 2012-01-10 15:20:52
假设你已经是特定事件的“唯一的呼叫ID”:
SELECT *
FROM tbl
WHERE sequence_number = (
SELECT MAX(sequence_number)
FROM tbl
WHERE sequence_number = (
SELECT sequence_number FROM tbl WHERE unique_id = PARTICULAR_EVENT_UNIQUE_ID
)
);
如果特定事件的序列号是已知的(代替或补充,以独特的呼叫ID),那么最内部选择可以用该值全部替换。
感谢马特,我不认为这是我正在寻找的。但是,您的回复让我想到了这一点。 SELECT * FROM ËDAILY_EVENTS WHERE = E.SEQUENCE_NUMBER ( SELECT(E.SEQUENCE_NUMBER - 1)AS PRIORSEQUENCE FROM DAILY_EVENTSË WHERE E.EVENT_ID = '5047' AND E.EVENT_DT BETWEEN '01/06/2012 'AND '01/07/2012' )我不确定它是否会起作用,因为此表有时需要几个小时。如果确实有效,我会更新这个问题。 – 2012-01-09 15:57:35
假定序列号是连续的(即,下一个记录总是有一个序列号1比当前记录时),尝试:
select i.*
from ivr_table i
where exists
(select 1
from ivr_table ni
where i.sequence + 1 = ni.sequence and ni.event_code = '5047')
编辑:select null
在子查询替换select 1
Mark,它告诉我“NULL”在使用它的上下文中无效。 – 2012-01-09 17:43:45
这很有趣 - 尝试使用'select 1'代替。 (大多数数据库允许在检查存在时选择“空”;我没有意识到DB2是不同的。) – 2012-01-09 18:36:31
DB2倾向于将NULL转换为特定的数据类型,因此Mark将NULL替换为NULL的假设是1好的举措。 – 2012-01-09 19:13:55
- 1. WPF在发生特定事件之前执行一个函数?
- 2. javascript事件发生之前触发
- 3. SQL事件探查器识别异常
- 4. SQL查询,在一个特定的顺序happend事件
- 5. 如何检查某个事件是否在特定时间范围内发生?
- 6. SQL Server查询 - 事件之间的事件时间总和
- 7. 让Rails在某个特定时间发生某些事情
- 8. 算法证明在某个时间点之前发生的事件
- 9. sql查询生成事件序列
- 10. 如何根据之前的事件预测下一个事件何时发生?
- 11. 在DOMContentLoaded之前触发的事件
- 12. 如何在别的东西之前强制发生某些事情JAVA
- 13. 试图在事件之前和事件后触发jQuery show()
- 14. 主页面onmenuitemdatabound事件在页面pre_render事件之前触发?
- 15. 绑定之前执行的事件和绑定后触发的事件
- 16. 识别触发触摸事件
- 17. RowEditEnded事件在保存之前触发
- 18. SelectionChanged事件在选择之前触发
- 19. 日历提醒没有在事件发生之前/之前发送通知
- 20. 查找特定事件发生的最早日期
- 21. jQuery:如何将函数绑定到mouseup事件之后立即发生的某个事件?
- 22. Laravel在查看事件之前
- 23. 在ajax之后发生事件onclick
- 24. 在动作被调用之前发生的ASP.NET MVC事件?
- 25. window.onload事件之前
- 26. 如何绑定jquery事件在标记执行事件之前
- 27. 如何识别哪个控件生成Click事件?
- 28. 呼叫show.bs.modal事件父事件之前
- 29. 在特定时间范围内查询事件的FQL事件表
- 30. 识别变化事件
您是否需要知道具有相同事件代码的最后一个ID?请更具体的 – 2012-01-09 15:06:29
我只需要知道事件“5047”(无效条目)之前发生了哪些事件代码。所以,不,我不需要知道具有相同事件代码的最后一个ID。它实际上应该是与5047不同的事件代码。 – 2012-01-09 15:16:05
您是否保证'序列号码是(正确)连续的,并且间隙_不会出现? – 2012-01-09 16:53:11