首页 > 解决方案 > 在mysql上根据月份过滤数据

问题描述

我只想知道仅出现在 2018 年 4 月至 2018 年 6 月的数据,并忽略在此之前一个月出现的数据,我想知道为什么当我检查随机数据手册时结果为 0,它是存在的。这是我的语法

SELECT DISTINCT d1.buyer_id, d1.tgl FROM data_2018 d1 INNER JOIN data_2018 d2 ON d1.buyer_id = d2.buyer_id INNER JOIN data_2017 d3 ON d1.buyer_id = d3.buyer_id WHERE MONTH(d1.tgl) IN (4, 5, 6 ) AND MONTH(d2.tgl) 不在 (1, 2, 3) AND MONTH(d3.tgl) 不在 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 );

标签: mysql-workbench

解决方案


我建议使用日期文字来指定您想要的日期范围。另外,我建议EXISTS在这里使用逻辑:

SELECT DISTINCT
    d1.buyer_id,
    d1.tgl
FROM data_2018 d1
WHERE
    d1.tgl >= '2018-04-01' AND d1.tgl < '2018-07-01' AND
    NOT EXISTS (SELECT 1 FROM data_2018 d2
                WHERE d2.buyer_id = d1.buyer_id AND d2.tgl < '2018-04-01');

这假设您只想消除也出现在 2018 年 4 月之前的记录。如果您还想限制在 2018 年 6 月之后不出现,那么我们需要在EXISTS子查询中添加一个检查。


推荐阅读