我希望仅使用关闭月份过滤我的查询,因此今天(17/11/2022)将仅返回31/10/2022及之前的日期。我尝试了以下方法:
WHERE EXTRACT(MONTH FROM dc.data) <= (EXTRACT(MONTH FROM CURDATE()) - 1)
所以我得到当前日期,提取月份并减去1,然后过滤〈=该月份,对吗?dc.data
但问题是,它也在过滤过去年份中的1-10个月,该过滤器应仅应用于当前年份,而仍显示过去年份中的所有月份,我如何才能做到这一点?
这个查询是在Apache Superset SQL编辑器上编写的,所以我认为我对函数有一些限制...数据库是MySQL(已编辑)
PS:我还想知道是否有一种方法可以优化这个查询,不确定这是否是一个处理日期的好方法
3条答案
按热度按时间piwo6bdm1#
如果你想要实际年份,你还需要比较年份
或者使用前一个月的最后一天来获取最后一天
您应该对数据使用INDEX以更快地获取数据
aamkag612#
Postgres提供了一个修道院函数date_trunc(参见文档)。其中一个选项是截断到
month
,它将返回参数的第一天。因此liwlm1x93#
TRUNC/DATE_TRUNC的MySQL等效项为
所以我的最终结果是