SELECT语句组合多行

时间:2013-07-10 12:35:11

标签: sql

我目前正在使用类似于以下的审核日志表:

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

状态335和66始终共享EventTime

我尝试按事件时间对数据进行分组,使用子选择等,但还没有完全设法得到我需要的最终结果。

其他信息

每天添加大约100000行。 对于每个EventTime,大约有40行都具有不同的信息(列数多于下面提供的示例)

2 个答案:

答案 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上有索引,可能会提供更好的效果。它为我做了一个小测试用例,但可能没有更大的数据集。执行计划建议降低成本。我想这取决于可用的索引。