我有一個來自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. 如何在事件發生之前記錄Rails查詢?
- 3. 爲什麼wrappanel事件在孩子的事件之前發生?
- 4. 在事件發生之前shutil copy2
- 5. javascript事件發生之前觸發
- 6. SQL事件探查器識別異常
- 7. SQL查詢,在一個特定的順序happend事件
- 8. 在事件發生前發生Javascript事件
- 9. 如何檢查某個事件是否在特定時間範圍內發生?
- 10. SQL Server查詢 - 事件之間的事件時間總和
- 11. SQL很難查詢:其他事件之間的事件
- 12. 讓Rails在某個特定時間發生某些事情
- 13. 算法證明在某個時間點之前發生的事件
- 14. SQL Server:按事件發生的前10個查詢,而不使用組
- 15. sql查詢生成事件序列
- 16. Facebook FQL查找在某個地點發生的所有事件
- 17. 什麼事件在asp.net頁面發生任何其他事件之前觸發
- 18. 事件處理程序在jquery中發生事件之前觸發
- 19. 如何根據之前的事件預測下一個事件何時發生?
- 20. 識別觸發函數的事件
- 21. 綁定事件之前?
- 22. 在DOMContentLoaded之前觸發的事件
- 23. 在一天中的某個特定時間發生火災事件
- 24. 查詢在給定時間發生事件的頻率
- 25. SelectionChanged事件的SelectedItem發生之前綁定
- 26. 如何判斷事件1發生在事件2之前,之後還是與事件2同時?
- 27. 在特定日的每個小時發生的事件數
- 28. 如何在別的東西之前強制發生某些事情JAVA
- 29. 在Form_Load事件(VB.NET)之前觸發了Timer事件標記
- 30. 試圖在事件之前和事件後觸發jQuery show()
您是否需要知道具有相同事件代碼的最後一個ID?請更具體的 – 2012-01-09 15:06:29
我只需要知道事件「5047」(無效條目)之前發生了哪些事件代碼。所以,不,我不需要知道具有相同事件代碼的最後一個ID。它實際上應該是與5047不同的事件代碼。 – 2012-01-09 15:16:05
您是否保證'序列號碼是(正確)連續的,並且間隙_不會出現? – 2012-01-09 16:53:11