我正在开发一个系统,在这个系统中,我们将客户数据拆分到多个表中。例如(简化):
客户状态
| 身份证|姓名|地位|
| - ------|- ------|- ------|
| 1个|斯坦|主动|
| 第二章|丹尼|封闭的|
| 三个|埃勒|主动|
| 四个|斯坦|主动|
账户状态
| 身份证|姓名|地位|
| - ------|- ------|- ------|
| 1个|斯坦|信誉良好|
| 第二章|丹尼|信誉良好|
| 三个|埃勒|信誉良好|
| 四个|斯坦|拖欠|
| 五个|斯坦|信誉良好|
| 六个|埃勒|拖欠|
订单状态
| 身份证|姓名|地位|
| - ------|- ------|- ------|
| 1个|斯坦|订购|
| 第二章|丹尼|订购|
| 三个|埃勒|待定|
| 四个|斯坦|已完成|
| 五个|斯坦|待定|
| 六个|埃勒|订购|
如果我想识别所有客户,那么:
- 客户状态:活跃
- 账户状态:拖欠
- 订单状态:待定
在上面的示例中,唯一返回的名称应该是Stan
我一直在尝试这样的SQL,但意识到它选择的不是最大值,而是具有我的过滤器的最大值:
SELECT * FROM customer_status c
WHERE c.id = (SELECT MAX(c2.id) FROM customer_status c2 WHERE c2.name = c.name) AND c.status = "active"
AND c.name in (SELECT name FROM account_status as WHERE as.id = (SELECT MAX(as2.id) FROM account_status as2 WHERE as.name = as2.name) AND as.active = "in arrears")
AND c.name in (SELECT name FROM order_status os WHERE os.id = (SELECT MAX(os.id) FROM order_status os2 WHERE os.name = os2.name) AND os.status = "Pending")
我意识到,返回的帐户状态和订单状态行是具有所提供状态的最高ID,而我希望获取每个客户的最后一行,然后仅在他们具有正确状态时才将其传递回来。
这里是否需要改用联接?
1条答案
按热度按时间dgtucam11#
您可以像这样进行简单的联接: