Mysql 什么';我关于过滤日期的语法有问题吗

Mysql 什么';我关于过滤日期的语法有问题吗,mysql,Mysql,我想将我的数据库过滤到发生在第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 mon

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

是tgl数据类型日期吗?在搜索条件中的列上使用month将阻止mysql使用索引。如果为“日期”,则可以更改查询:

select
    buyer_id,
    tgl
from data_2017
where tgl between '2017-04-01' and '2017-06-30'
and buyer_id in (SELECT DISTINCT buyer_id FROM tgl between '2017-07-01' and '2017-09-30')

似乎您希望在9月7日8日存在的任何买家id查找4月5日6日的数据。以下是当前查询的修改版本:

SELECT
      buyer_id,
      tgl
FROM  data_2017
WHERE MONTH(tgl) IN (4,5,6) 
AND   buyer_id IN (SELECT buyer_id FROM data_2017
                   WHERE  MONTH(tgl) IN (7,8,9) GROUP BY buyer_id);

对不起,我还是mysql的新手,d2是什么?在这个语法中,我只使用了一个表谢谢你的回答,但是我试过你的语法,它是错误的,它变成了超过35k的数据,在这个例子中,它变成了买家,在第4个月交易,直到第7个月出现,但我想要的是像这样的例子,第4个月有买家,第7个月再次交易,然后数据应该出现,但当买方仅在第4个月或第7个月进行交易时,不应使用
选择DISTINCT
显示数据。如果这仍然不能生成您想要的内容,那么是时候向您的问题添加示例输入/输出了。在这里显示您想要的结果。好的,像这样,示例是这样的,如果我在4/5/6月之间进行交易,并且在7/8/9月之间再次进行交易,那么我将成为该数据中的一员,但是如果仅在4/5/6月或7/8/9月进行交易,那么我不应该出现在该数据中。老实说,我的查询已经使用了这个逻辑。同样,如果这里给出的答案仍然不能解决您的问题,您应该添加示例数据。您如何知道OP实际需要的年份?我尝试过这种语法,但它被打断了,但是谢谢您,先生谢谢您的回答,但是idk为什么数据只出现在第5个月,这似乎有任何错误,但idk错误在于子查询中的
groupby
令人困惑且不必要。@TimBiegeleisen,我认为如果
buyer\u id
在7,8,9月存在不止一次,是否应该将其分组,以便每个
buyer\u id
中只出现一次?或者我误解了这个问题。。。。再一次..@FachryDzakyAl QadriSabil,你能单独运行子查询并查看有多少
买家id
结果吗?我运行了你的查询,结果只有49,这是买家id的金额,他们只在第5个月进行交易。我不明白为什么会这样,我也同意你的质疑,但我不明白为什么会这样