一尘不染

在SQL中配对发送和接收数据行

sql

在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

我已经尝试过在表本身上进行联接,但是我只看到配对的数据(有大量重复项)…我找不到发送项目的情况,但是没有找到配对的收据。


阅读 115

收藏
2021-05-16

共1个答案

一尘不染

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

从样本数据量有限,似乎可以唯一地具有共同确定匹配moduleuserbatch。我不确定为什么您要在查询中重复输入。唯一的其他问题似乎是使用外部联接来保留尚没有“接收”的“发送”。

我认为您仍然想要结果中的所有内容。如果您只想要未配对的方案,请添加:

where r.Module is null
2021-05-16