2013-07-10 127 views
4

目前與我類似的審計日誌表工作:SELECT語句結合多行

ID | EventTime   | AccessID | AccessType | Status | Final 
------------------------------------------------------------------------------ 
1 | 2013/02/10 01:01:01 | NULL  | 123   | 335  | OK 
2 | 2013/02/10 01:01:01 | 985521 | NULL  | 66  | OK 
.... 
41 | 2013/02/10 07:07:07 | NULL  | 456   | 335  | OK 
42 | 2013/02/10 07:07:07 | 113228 | NULL  | 66  | OK 

什麼,我需要選擇的是AccessIDAccessType成一排,即:

AccessID | AccessType 
------------------------ 
985521 | 123 
113228 | 456 

AccessID始終是唯一的,並且只在Status = 66的行中可用。 AccessType只適用於Status = 335

EventTime始終是狀態335和66

我試圖通過事件時間對數據進行分組共享,使用子選擇等,但還沒有完全設法得到最終的結果,我需要。

附加信息

有大約10萬行,每天補充。 對於每個EVENTTIME有所有不同的信息大約40行(有比下面提供的示例更多的列)

回答

7

試試這個方法:

select max(AccessID) as AccessID, max(AccessType) as AccessType 
from audit_log 
where Status in (335,66) 
group by EventTime 
+0

可能想在狀態335和66上過濾出來,以防其中還有其他值。 – Mauro

+0

@Mauro確實!謝謝! – Parado

+0

完美謝謝! – lethalMango

2

這應該也是我認爲:

SELECT A1.AccessID, A2.AccessType 
FROM 
    (SELECT EventTime, AccessID FROM audit_log WHERE Status=66) A1 
INNER JOIN 
    (SELECT EventTime, AccessType FROM audit_log WHERE Status=335) A2 
ON A1.EventTime=A2.EventTime 

如果在status上有索引,可能會獲得更好的性能。它爲我提供了一個小的測試用例,但可能不包含更多的數據。執行計劃雖然表明成本較低。我想這取決於可用的索引。