Mysql sql查询以获取具有特定时间戳的所有用户的事务

Mysql sql查询以获取具有特定时间戳的所有用户的事务,mysql,Mysql,我有如下sql表结构: id INT(11), amount DOUBLE(10,2), createdAt DATETIME, user_id INT(11), tx_status INT(11). 发送状态的值可以是1(贷方)、2(借方)和3(已结算)。现在我想要的是,当特定用户的tx_status=3时,我想要所有用户的所有最新事务,其中事务createdAt大于最后一个createdAt 数据如下所示: id . amount . createdAt . user_

我有如下sql表结构:

id INT(11),
amount DOUBLE(10,2),
createdAt DATETIME,
user_id INT(11),
tx_status INT(11).
发送状态的值可以是1(贷方)、2(借方)和3(已结算)。现在我想要的是,当特定用户的tx_status=3时,我想要所有用户的所有最新事务,其中事务createdAt大于最后一个createdAt

数据如下所示:

id .  amount . createdAt .          user_id .      tx_status
112   500 .    2019-05-15 00:30:40  345 .          1
113 . 300      2019-05-16 06:45:29  345 .          2
116 . 600 .    2019-05-16 06:45:33  345 .          3
119 . 567 .    2019-05-17 07:56:55  345 .          1
121   500 .    2019-05-18 00:30:40  346 .          1
123 . 300      2019-05-19 06:45:29  346 .          2
124 . 600 .    2019-05-20 06:45:33  346 .          3
126 . 567 .    2019-05-21 07:56:55  346 .          1
输出应为:

id .  amount . createdAt .          user_id .      tx_status
119 . 567 .    2019-05-17 07:56:55  345 .          1
126 . 567 .    2019-05-21 07:56:55  346 .          1

此查询将为您提供所需的结果。它使用结算发生的最大时间的派生表,使用条件聚合确保如果没有发生结算,该时间为“1970-01-01”(以便返回所有记录)


您想查看上次结算后是否有任何借方或贷方?是的,我想查看每个用户在上次结算后的具体借方和贷方。如果没有状态为3的交易怎么办?然后在示例数据中显示该特定用户的所有交易,您有一些无效时间,但是为什么不包括用户345结算后的两个交易?只有一个交易id为
119
,用户id为
345
id
113
的交易无效时间大于
tx\u status=3
的交易无效时间。也许您可以在示例数据中更正这些时间
SELECT t1.*
FROM transactions t1
JOIN (SELECT user_id, MAX(CASE WHEN tx_status = 3 THEN createdAt ELSE '1970-01-01' END) AS last_settlement
      FROM transactions t2
      GROUP BY user_id) t2 ON t2.user_id = t1.user_id AND t2.last_settlement < t1.createdAt
id  amount  createdAt           user_id tx_status
119 567     2019-05-17 07:56:55 345     1   
126 567     2019-05-21 07:56:55 346     1