sql - 在进入新的一年时找出上个月的数据
问题描述
目前,我正在使用此代码查看上个月的数据,以便在亚马逊的 Athena 中快速查看(这第一部分有效*):
SELECT month, count(1)
FROM table1
WHERE CAST(EXTRACT(month from now()) - 1 as VARCHAR(2)) = month
GROUP BY month
挑战在于如何确保在我们进入新的一年后这段代码能够正常工作?我目前有
SELECT month, count(1)
FROM table1
WHERE CASE WHEN( month = '1' THEN month = '13'
ELSE month
END)
CAST(EXTRACT(month from now()) - 1 as VARCHAR(2)) = month
GROUP BY month
为了澄清,月份作为字符串输入,因此 CAST 为 VARCHAR(2) 以获取“01”到“12”。我在这背后的思考过程是,如果月 = '01',那么它读为'13',然后提取'1',等于'12'。但不确定这是否可行
解决方案
您可以使用该date_add
函数从今天减去一个月:
SELECT DATE_ADD('month', -1, NOW())
或者,您可以减去一个月的间隔以获得相同的结果:
SELECT NOW() - INTERVAL '1' MONTH
在这两种情况下,您都可以使用MONTH(…)
orEXTRACT(MONTH FROM …)
来获取月份编号。
推荐阅读
- php - Dreamweaver CC (2017) 提示在包含文件的外部不起作用
- vba - 使用 VBA 预览 Outlook 附件
- java - Spring Boot 应用程序未拉入外部 application.properties 文件
- java - SQLHelper 的游标返回带指数的数字
- jquery - 防止在移动设备上加载视频
- python - 来自帖子的龙卷风重定向完成,未捕获出现在控制台中
- python - 使鼠标记录器停止记录 gui 点击
- r - netgraph : 设置标签的位置
- xamarin - Xamarin Essentials 和 Xamarin Forms 包冲突
- visual-studio - MSBuild 失败,但在 VisualStudio 中加载项目后,它可以与 MSBuild 一起使用