我是一名SQL初學者。在問我確切的問題之前,我想簡要介紹一下情況,只是爲了闡明正確的背景。如何使用T-SQL過濾大量數據,然後處理結果組?
我有一個大表,其中包含每次電子令牌創建,更新或關閉時的記錄。表的主鍵是「歷史ID」,每個標記都有一個令牌號,它在一天的開始時被回收(即帶有令牌號的單個令牌,例如15不能在相同的時間內打開,關閉然後重新打開天)。
下面是該表的快照。如您所見,創建Token No 940(狀態ID = 1),然後更新爲各種狀態(2,3,4),然後關閉(10)。之後,隨着日子開放,940有更多的記錄。
╔═════════════════╦══════════╦═══════════╦═════════════════════════╗
║ History ID (PK) ║ Token ID ║ Status ID ║ Status Updated On ║
╠═════════════════╬══════════╬═══════════╬═════════════════════════╣
║ 13435 ║ 953 ║ 1 ║ 2013-01-24 16:20:26.957 ║
║ 13436 ║ 940 ║ 1 ║ 2013-01-24 16:20:22.090 ║
║ 13437 ║ 939 ║ 3 ║ 2013-01-24 16:20:30.290 ║
║ 13438 ║ 939 ║ 5 ║ 2013-01-24 16:21:07.387 ║
║ 13439 ║ 940 ║ 2 ║ 2013-01-24 16:21:09.000 ║
║ 13440 ║ 940 ║ 3 ║ 2013-01-24 16:23:14.510 ║
║ 13441 ║ 940 ║ 4 ║ 2013-01-24 16:23:15.860 ║
║ 13442 ║ 940 ║ 10 ║ 2013-01-24 16:23:30.013 ║
║ 13443 ║ 938 ║ 2 ║ 2013-01-24 16:23:31.657 ║
╚═════════════════╩══════════╩═══════════╩═════════════════════════╝
我需要能夠通過它們關聯的標記將記錄組合在一起。我看到它的方式,這意味着我需要先白過濾記錄,然後我可以通過令牌編號過濾結果,爲每個令牌編號和每天提供一組記錄。然後,我可以執行我需要的計算,例如平均從一種狀態更改爲另一種狀態的時間,或繪製令牌保持打開狀態的持續時間。
我不知道如何做到這一點,任何幫助將不勝感激。我猜想對於一個有經驗的SQL開發人員來說,這樣的問題相當簡單嗎?
感謝提前:)
你只需要'SELECT COUNT(HistoryID).. FROM歷史GROUP BY TokenID,CAST(StatusUpdatedOn as DATE)'...?我認爲你至少應該加上你想要的結果,以及你到目前爲止所嘗試過的結果。 –
我可以推薦www.sqlzoo.net作爲一個優秀的初學者 - >中級SQL教程網站。祝你好運。 – JeffUK
LEAD()分析函數將用於計算狀態更改之間時間的差異。這會給你所需的平均時間,確定時間開放等。日期的最小()/最大()()會給你每個令牌的開放和關閉時間(假設是最短的,最近的時間是開放的如果不是的話,我們可以使用分析函數和case語句來解決這個問題,但是這裏沒有具體的問題,請提供一些預期的結果以及您嘗試過的結果,我們可以從這裏開始。 – xQbert