我有以下表格:
表1
id
name
number
status
表2
id
table1_id
transaction_no
transaction_date
我要返回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.id = tab2.table1_id
WHERE tab1.status = "Active"
AND
(SELECT MAX(tab2.transaction_date) FROM tab2
GROUP BY tab1.name) <= (date 4 months ago)
我知道这是不对的,但我的大脑正在努力围绕着这个想法,或者我让它变得更复杂。如有任何建议或指导,将不胜感激。
1条答案
按热度按时间brc7rcf01#
那个
GROUP BY tab1.name
在子查询中没有意义。tab1
不在子查询的上下文中(也不在tab2
为此)。相反,您可以执行相关子查询:现在子查询可以独立存在,并且通过where子句与主查询正确关联。
如果您只需要最新的t2记录(而且必须是4个多月前的记录),那么from子句中的子查询将起作用:
在这里,我们仍然使用一个相关子查询从表2中获取每个表1\u id的事务日期最大的记录,然后将每个表1\u id的一个记录连接回table1.id。