我想将数据库过滤到发生在4/5/6个月和7/8/9个月的数据中,这是我的语法:

select
    buyer_id,
    tgl
from data_2017
where
    month(tgl) = 4 or month(tgl) = 5 or month(tgl) = 6 AND
    buyer_id IN (select buyer_id, tgl from data_2017
                 here month(tgl) = 7 or month(tgl) = 8 or month(tgl) = 9);


而且我不知道哪个语法有问题

最佳答案

您的直接问题是,您遇到了WHERE子句中缺少括号的优先级问题。您当前的逻辑实际上是在这样做:

WHERE
    MONTH(tgl) = 4 OR MONTH(tgl) = 5 OR (MONTH(tgl) = 6 AND buyer_id IN (... subquery))


您应该在月度检查中加上括号,以便一起进行评估。
 但是,除了解决此问题之外,我还可能会使用自联接来编写您的查询:

SELECT DISTINCT
    d1.buyer_id,
    d1.tgl
FROM data_2017 d1
INNER JOIN data_2017 d2
    ON d1.buyer_id = d2.buyer_id
WHERE
    MONTH(d1.tgl) IN (4, 5, 6) AND
    MONTH(d2.tgl) IN (7, 8, 9);

关于mysql - 我有关过滤日期的语法有什么问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59483687/

10-15 19:22