Mysql 什么';我关于过滤日期的语法有问题吗
我想将我的数据库过滤到发生在第4/5/6个月和第7/8/9个月的数据中,以下是我的语法: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
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个月进行交易。我不明白为什么会这样,我也同意你的质疑,但我不明白为什么会这样