2017-06-08 235 views
0

我需要一些帮助,在月末运行查询。每个月的第一个工作日可能会有所不同,因此我可能只在某个特定月份的第三天工作。MySQL月度报告日期

我试图找出我的WHERE语句看起来像到当月选择的数据,除非是: 月1日,那么它将需要选择一切较前期 第1个工作日一个月,这可能是第三。它还需要选择上个月的数据。

这些是我目前正在玩的两种场景,还没有数据来测试它。

我曾经想过做

WHERE 
MONTH(action_date) = MONTH(DATE_SUB(CURDATE(),INTERVAL 1 DAY)) 

不过这随后也从2016年

返回的数据我也想过做

WHERE 
action_date = DATE_SUB(CURDATE(),INTERVAL 1 DAY) 

,但如果今天是这样是行不通的说星期一的第三场。

我希望这会给我这样做

+0

见:我为什么要为了什么,在我看来是一个非常简单的SQL查询提供MCVE?](https://meta.stackoverflow.com/问题/ 333952/WH y-should-i-provide-an-mcve-for-what-seems-to-the-a-very-simple-sql-query) – Strawberry

+0

我会有一个日历表,它会有一个标志表明当月的第一个工作日,并将这些报告驱除。如果您不允许这样做(并且它可能位于单独的模式中),那么您还可以加入包含将来几年的所有第一个工作日的子查询)。 –

回答

0

你可以简单地减去一个数天或从日期甚至一个月的最佳途径的任何答案,因为所有你实际上会从减法得到的是反正一个月

MONTH(DATE_SUB(CURDATE(),INTERVAL 5 DAY)) 

OR

MONTH(DATE_SUB(CURDATE(),INTERVAL 1 MONTH)) 
+0

减去说3天的问题意味着如果今天是周三的话。我将从上个月获取数据,但如果今天是周三,我希望本月的数据。 所以我需要检查日期名称和日期。 –