4

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

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

我需要选择的是AccessIDandAccessType成一行,即:

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

始终是唯一的AccessID,并且仅在 所在的行中可用Status = 66AccessType仅在Status = 335.

EventTime始终为状态 335 和 66 共享。

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

附加信息

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

4

2 回答 2

7

Try this way:

select max(AccessID) as AccessID,  max(AccessType) as AccessType
from audit_log 
where Status in (335,66)
group by EventTime
于 2013-07-10T12:37:56.213 回答
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。它适用于我的一个小测试用例,但可能不适用于更大的数据集。执行计划建议降低成本。我想这取决于可用的索引。

于 2013-07-10T12:56:59.853 回答