mysql—查找在1分钟内发生的、具有相同id的事务

yjghlzjz  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(500)

目前,我需要找到所有发生在1分钟内的交易对方。
输出示例如下:

ID, Transaction_ID  , Datetime
123, 12345          , 2017-02-01 00:01:00 
124, 12345          , 2017-02-01 00:02:00 
125, 12345          , 2017-02-01 02:02:00

因此,正如您所看到的,前两个事务id是相同的,并且每个事务都是在1分钟内完成的,所以我希望显示这两个事务,但不是最后一个事务,因为它是在2小时内完成的,即使它具有相同的事务id。
以下是我当前的查询:

select t.id, t.datetime, tl.transaction_id
from transactions t
left join transaction_log tl on tl.transaction_log_id = t.id
where t.datetime >= @start
and t.datetime<@end
group by t.id

谢谢您。

0ejtzxu1

0ejtzxu11#

为了进一步了解barmar的答案,您还需要使用groupby来过滤在一分钟内有两个以上事务时创建的任何重复对。这是由于交叉联接(交叉联接相当于联接),它将在一分钟内显示每个事务的每个示例,甚至它本身(即:一分钟内3个事务总共有9行)。“and t1.id<t2.id”约束将把这一行减少到3行,但不是您想要的行。)可以使用(partition by id)=1上的row_number(),但我不相信mysql支持这一点。

SELECT t1.transaction_id, t1.id, t1.datetime, count(*) as cnt
FROM transactions AS t1
CROSS JOIN transactions AS t2 
    ON t1.transaction_id = t2.transaction_id
    AND (t1.datetime BETWEEN DATE_SUB(t2.datetime, INTERVAL 1 MINUTE) AND DATE_ADD(t2.datetime, INTERVAL 1 MINUTE))
    AND t1.id <> t2.id
GROUP BY 1,2,3

我希望这有帮助!

y0u0uwnf

y0u0uwnf2#

使用 ON 条件。

SELECT t1.transaction_id, t1.id, t1.datetime, t2.id, t2.datetime
FROM transactions AS t1
JOIN transactions AS t2 
    ON t1.transaction_id = t2.transaction_id
    AND t1.datetime >= DATE_SUB(t2.datetime, INTERVAL 1 MINUTE)
    AND t1.id < t2.id

相关问题