我目前正在使用类似于以下的审核日志表:
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
我需要选择的是AccessID
和AccessType
成一行,即:
AccessID | AccessType
------------------------
985521 | 123
113228 | 456
AccessID
始终是唯一的,仅在Status = 66
的行中可用。 AccessType
仅适用于Status = 335
。
状态335和66始终共享EventTime
。
我尝试按事件时间对数据进行分组,使用子选择等,但还没有完全设法得到我需要的最终结果。
其他信息
每天添加大约100000行。 对于每个EventTime,大约有40行都具有不同的信息(列数多于下面提供的示例)
答案 0 :(得分:7)
尝试这种方式:
select max(AccessID) as AccessID, max(AccessType) as AccessType
from audit_log
where Status in (335,66)
group by EventTime
答案 1 :(得分: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
上有索引,可能会提供更好的效果。它为我做了一个小测试用例,但可能没有更大的数据集。执行计划建议降低成本。我想这取决于可用的索引。