在SQL中将数据行配对以识别某项何时过期但不返回的问题。发送和接收条目位于不同的行上,并且两者之间存在数据关系,所以我认为这是可行的,我只是对解决方案感到困惑。模块和用户应将事务绑定在一起,但是另外还有一个“批”列,可用于进一步确保唯一事务
表结构示例:
MODULE USER EVENTDTTM ACTION Batch -------------------------------------------------------------------- MODULE1 USERB 2016-01-09 13:00:00 SENT 001 MODULE1 USERB 2016-01-09 13:01:00 RECEIVED 001 MODULE2 USERA 2016-01-09 13:00:00 SENT 001 MODULE2 USERA 2016-01-09 13:01:00 RECEIVED 001 MODULE1 USERA 2016-01-09 13:03:00 SENT 002 MODULE2 USERB 2016-01-09 13:04:00 SENT 002
我已经尝试过在表本身上进行联接,但是我只看到配对的数据(有大量重复项)…我找不到发送项目的情况,但是没有找到配对的收据。
select * from (select * from T where Action = 'SENT') s left outer join (select * from T where Action = 'RECEIVED') r on r.Module and s.Module and r.User = s.User and r.Batch = s.Batch
从样本数据量有限,似乎可以唯一地具有共同确定匹配module,user和batch。我不确定为什么您要在查询中重复输入。唯一的其他问题似乎是使用外部联接来保留尚没有“接收”的“发送”。
module
user
batch
我认为您仍然想要结果中的所有内容。如果您只想要未配对的方案,请添加:
where r.Module is null