我對數據庫編程相當陌生。查詢以識別每個終端ID的差距
我有一個記錄事務行(每個都有一個唯一的ID)的表 - 唯一的ID由正在處理事務的終端/ PC定義。
例如:
PC1將起始於100,並執行交易將去101,102,103,104等
PC2將在200開始,並且將去201,202,203,204 etc
所有這些都在同一個表中,所以TransactionIDs是混亂的(即第一個入口將用於PC1,接下來的兩個將是PC2,然後是PC1的另一個 - 這是由於它們按時間戳排序)
我想做一個查詢,w在ID中顯示大於100的任何間隙,但僅針對與PC相關的ID(否則結果將顯示101和204作爲「間隙」)
期望的結果將是兩個ID之間的差距100加上時間戳和PC名稱。
我已經做了一個類似於這個查詢以查找時間戳中的差距,但不確定abvoe是否如此簡單。這是查詢:
WITH ordered AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY date) rn
FROM Table1
)
SELECT o1.ID id1, o1.DATE date1, o2.ID id2, o2.DATE date2, DATEDIFF(s, o1.date, o2.date) diff
FROM ordered o1 JOIN ordered o2
ON o1.rn + 1 = o2.rn
WHERE DATEDIFF(s, o1.date, o2.date) > 120
有什麼想法?
而且,如果包含樣本數據和期望的輸出,它會更清晰。 – sstan
我必須指出當PC超過100次交易時會發生什麼缺陷,並且他們流入其他範圍?總的來說,這是一個糟糕的主意。 – Jeremy
我剛剛使用該範圍作爲示例,我使用的數據庫的ID範圍爲15位數,因此滲入其他範圍不是問題。爲了簡單起見,我只是使用三位數字的ID – JMac