提问者:小点点

如何查询msyql对不同表的行进行计数


对不起,朋友们,我想问一下。我有4个db表。

桌位

表type_member

表事务处理

表history_member

如上所示的表格内容示例。如果表格的内容像上面的照片。如何找出总交易类型_Member“银”是怎样的?因为,例如,如果我使用查询select*from loket join transaction on loket.id=transaction.loket_id where loket.type_member_id=2将loket表与事务连接起来,那么结果必须为空,因为在transaction表中假定没有事务来自成员类型为silver的loket。即使你看看历史,它应该是在2021-04-30。

因为在2021-04-30 loket rahmat,成员的类型仍然是银。但在2021-05-01年,loket rahmat从银变成了金。请求帮助的朋友,如何正确的查询,这样的结果,我知道哪些是来自银会员类型的交易,哪些是来自黄金。事先谢谢你


共1个答案

匿名用户

这个查询应该会给出您想要的结果。它通过将transactionsleft join连接到history_member表来计算每个事务的适当type_member_id,只选择事务之前(或当天)的最新更改。如果成员类型没有更改,则使用原始值(来自loket):

SELECT COALESCE(h.to_member, l.type_member_id) AS member_type, SUM(price) AS transactions
FROM loket l
JOIN transaction t ON t.loket_id = l.id
LEFT JOIN history_member h ON h.loket_id = l.id AND h.create <= t.create
WHERE NOT EXISTS (SELECT * FROM history_member h2 WHERE h2.loket_id = l.id AND h2.create <= t.create AND h2.create > h.create)
GROUP BY member_type
HAVING member_type = 2

输出(用于示例数据):

member_type     transactions
2               1000

dbfiddle演示