我想将数据库过滤到发生在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/