在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
我已经尝试过在桌面上进行连接,但是我只看到配对数据(有大量重复数据)...我找不到项目发送的场景,但没有配对收据被发现。
答案 0 :(得分:0)
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
来唯一确定匹配项。我不确定你为什么在查询中提出重复项。唯一的另一个问题似乎是使用外部联接来保留尚未“接收”的“发送”。
我认为你仍然想要结果中的一切。如果您只想要未配对的方案,请添加:
where r.Module is null
答案 1 :(得分:0)
SELECT
T1.module,
T1.user,
T1.eventdttm,
T1.action,
T1.batch
FROM
My_Table T1
WHERE
T1.action = 'SENT' AND
NOT EXISTS
(
SELECT *
FROM My_Table T2
WHERE
T2.module = T1.module AND
T2.user = T1.user AND
T2.batch = T1.batch AND
T2.action = 'RECEIVED'
)