0

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

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

4

2 回答 2

1

问题是OR逻辑包括任何出现在201209or中的东西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)
  )
于 2013-06-14T18:24:49.460 回答
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)

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

于 2013-06-14T18:30:52.137 回答