Mysql 嵌套选择,还是过于复杂?
我有以下表格: 表1 表2 我想返回table1.name、table1.num、table2.transaction\u no的列表,其中table1.status=Active且最新的table2.transaction\u日期早于4个月 我一直在尝试类似的东西,但是语法在不同的地方都失败了Mysql 嵌套选择,还是过于复杂?,mysql,sql,Mysql,Sql,我有以下表格: 表1 表2 我想返回table1.name、table1.num、table2.transaction\u no的列表,其中table1.status=Active且最新的table2.transaction\u日期早于4个月 我一直在尝试类似的东西,但是语法在不同的地方都失败了 SELECT tab1.name, tab1.num, tab2.transaction_no FROM table1 AS tab1 INNER JOIN table2 AS tab2 ON tab1
SELECT tab1.name, tab1.num, tab2.transaction_no
FROM table1 AS tab1
INNER JOIN table2 AS tab2 ON tab1.id = tab2.table1_id
WHERE tab1.status = "Active"
AND
(SELECT MAX(tab2.transaction_date) FROM tab2
GROUP BY tab1.name) <= (date 4 months ago)
我知道这是不对的,但我的大脑正在努力围绕这个想法,或者我让它变得更复杂。如果您有任何建议或指导,我们将不胜感激。在您的子查询中,按tab1.name分组是没有意义的。tab1不在子查询的上下文中,也不在istab2中。相反,您可以执行相关子查询:
AND (SELECT MAX(t2.transaction_date) FROM table2 t2 WHERE t2.table1_id = tab1.id) <= (date 4 months ago)
在这里,我们仍然使用一个相关子查询从table2中获取每个table1\u id具有最大事务日期的记录。然后,我们将每个table1\u id的一条记录合并回table1.id。感谢对该格式有帮助的人!!这是朝着正确方向迈出的一步,只要它让我明白,我会把它标记为正确的。我忘了提到我只想要表2中的最新交易。
SELECT tab1.name, tab1.num, tab2.transaction_no
FROM table1 AS tab1
INNER JOIN table2 AS tab2 ON tab1.id = tab2.table1_id
WHERE tab1.status = "Active"
AND
(SELECT MAX(tab2.transaction_date) FROM tab2
GROUP BY tab1.name) <= (date 4 months ago)
AND (SELECT MAX(t2.transaction_date) FROM table2 t2 WHERE t2.table1_id = tab1.id) <= (date 4 months ago)
SELECT tab1.name, tab1.num, tab2.transaction_no
FROM table1 AS tab1
INNER JOIN (
SELECT transaction_no, table1_id
FROM table2 t2
WHERE transaction_date = (SELECT max(transaction_date) FROM table2 WHERE table1_id = t2.table1_id)
) AS tab2
ON tab1.id = tab2.table1_id
WHERE tab1.status = "Active";