我试图在11月找到账户,这些账户在前几个月的任何一个月都有重复,直到8月(10月,9月,8月)。
例如,帐户1243是在11月,如果在8月,9月或10月看到,则应该使用该帐户返回,如果没有,则不会显示该帐户。数据只有3列,ID,帐户和日期。以下是我的询问:
SELECT distinct account
FROM `nash`
WHERE `date`=201211
AND account IN (SELECT account
FROM `nash` where `date`=201208
OR account IN
(SELECT account
FROM `nash` where `date`=201209)
OR account IN
(SELECT account
FROM `nash` where `date`=201210));
另请注意,11月之后的日期也在同一张表中,不应包含在结果中。
请让我知道我能做些什么。谢谢!
答案 0 :(得分:1)
问题在于OR
逻辑包含201209
或201210
中显示的所有内容。 OR
的优先级低于AND
,因此您的逻辑结果如下:
date=201211 AND account IN (SELECT account FROM nash where date=201208)
,或 date=201209
,或 date=201210
您可以通过将其更改为此来摆脱OR
逻辑(并使查询更快,因为只有一个子查询扫描):
SELECT distinct account
FROM `nash`
WHERE `date`=201211
AND account IN (
SELECT account
FROM `nash`
WHERE `date` IN (201208, 201209, 201210)
)
答案 1 :(得分:0)
SELECT * FROM `nash` a WHERE month( date ) =10
AND EXISTS ( SELECT * FROM nash b WHERE a.account = b.account AND month( b.date ) <10)
请注意,如果您的数据超过一年,您可能希望将月份(日期)更改为完整日期