对不起,朋友们,我想问一下。我有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从银变成了金。请求帮助的朋友,如何正确的查询,这样的结果,我知道哪些是来自银会员类型的交易,哪些是来自黄金。事先谢谢你
这个查询应该会给出您想要的结果。它通过将transactions
表left 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演示