MySQL Query在多个月内查找重复

时间:2013-06-14 18:15:36

标签: mysql

我试图在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月之后的日期也在同一张表中,不应包含在结果中。

请让我知道我能做些什么。谢谢!

2 个答案:

答案 0 :(得分:1)

问题在于OR逻辑包含201209201210中显示的所有内容。 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)

请注意,如果您的数据超过一年,您可能希望将月份(日期)更改为完整日期