有一個 DB 表“SiteTransactions”(在 Sql Server 中),其當前具有以下示例格式的記錄
| ID | 交易型別 | 站點組 | 站點名稱 | 交易時間 |
|---|---|---|---|---|
| 1 | 創建 | SG1 | 測驗站點1 | 2021-08-27 19:22:26.4318370 |
| 2 | 洗掉 | SG1 | 測驗站點1 | 2021-08-28 09:22:26.4318370 |
| 3 | 創建 | SG2 | 測驗站點2 | 2021-08-28 10:12:26.4318370 |
| 4 | 創建 | SG1 | 測驗站點3 | 2021-08-29 19:22:00.4318370 |
| 5 | 洗掉 | SG2 | 測驗站點2 | 2021-08-30 08:04:26.4318370 |
| 6 | 創建 | SG2 | 測驗站點2 | 2021-08-31 20:18:26.4318370 |
| 7 | 洗掉 | SG2 | 測驗站點2 | 2021-08-31 20:20:26.4318370 |
此表存盤所有 SiteName 事務詳細資訊。創建和洗掉事務都存盤在同一個表中。這里的問題是沒有專用的識別符號列可以判斷給定的 SiteGroup-SiteName 組合當前是否處于活動狀態(即尚未被洗掉)
SiteName 始終是唯一的,并且沒有 2 個活動的SiteName 可以具有相同的名稱,除非先前已洗掉給定的 SiteName。上表示例中的“TestSite2”。
要求
上面提到的要求是獲取尚未洗掉的僅活動的 SiteGroup-SiteName 組合串列。
這樣做的唯一方法是檢查任何 SiteGroup-SiteName 組合是否具有洗掉事務型別值并比較事務時間。
上述示例表的正確輸出應如下所示,因為只有 TestSite3 創建后未被洗掉(因此它被認為是活動的):
| ID | 交易型別 | 站點組 | 站點名稱 |
|---|---|---|---|
| 4 | 創建 | SG1 | 測驗站點3 |
我試過的
現在我已經通過對 TransactionTime 時間戳進行commapring來構建以下查詢:
SELECT DISTINCT(A.SiteName), A.SiteGroup, A.TransactionType, A.TransactionTime
FROM SiteTransactions A, SiteTransactions B
WHERE A.SiteName= B.SiteNameAND A.SiteGroup = B.SiteGroup
AND A.TransactionType = 'Create'
AND A.TransactionTime> B.TransactionTime
ORDER BY A.TransactionTime DESC
But the problem with my query is that it also returns TestSite2 records (which has been deleted twice) due to the TransactionTime comparison check I have in place
What would be the tweak I need to make to get the required output?
uj5u.com熱心網友回復:
您可以為此使用條件視窗計數
SELECT
Id,
TransactionType,
SiteGroup,
SiteName
FROM (
SLEECT *,
cnt = COUNT(CASE WHEN TransactionType = 'Delete' THEN 1 END)
OVER (PARTITION BY SiteGroup, SiteName
ORDER BY TransactionTime ROWS UNBOUNDED PRECEDING)
FROM YourTable t
) t
WHERE cnt = 0;
uj5u.com熱心網友回復:
您可以使用 Row_Number 排名函式來確定每個組中最后一個事務的型別。
Select ID, TransactionType, SiteGroup, SiteName
From
(Select ID, TransactionType, SiteGroup, SiteName,
Row_Number() Over (Partition by SiteGroup, SiteName Order by TransactionTime Desc) As Num
From SiteTransactions) As t
Where Num=1 And TransactionType='Create'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344767.html
標籤:sql sql-server
上一篇:SQL查詢過濾問題
