sql - SQL 日期场景,用于在本月 1 日获取上个月的数据,然后在上个月下降
问题描述
我正在尝试在 Snowflake 中重新创建现有视图(最初在 SQL Server 中)。我需要获取上个月的数据,这很容易,但情况如下:
在 3-1-21,它应该检索 2-1-21 到 3-1-21,但是从 3-2-21 开始,它应该只显示 3-1-21 to-date,作为我们的月末报告每月 1 号出去,它应该包括上个月的所有数据,但是在每月 2 号,它应该只显示 3-1-21 到日期。知道怎么做吗?我可以得到上个月的数据加上第一个,但我不知道如何让它下降上个月并在每月 2 日之后显示 MTD。
WHERE DATE(CHDCR, 'YYYYMMDD') >= ADD_MONTHS(CURRENT_DATE()-1,-1)
解决方案
WITH dates AS (SELECT * FROM VALUES ('2021-03-01'),
('2021-03-02'),
('2021-03-03'),
('2021-02-01'),
('2021-02-02') v(day))
SELECT day
,DATE_TRUNC('month',DATEADD('day',-1, day)) AS from_date
,DATEADD('month',1, from_date ) AS to_date
FROM dates
ORDER BY 1;
我们得到结果:
DAY FROM_DATE TO_DATE
2021-02-01 2021-01-01 00:00:00.000 2021-02-01 00:00:00.000
2021-02-02 2021-02-01 00:00:00.000 2021-03-01 00:00:00.000
2021-03-01 2021-02-01 00:00:00.000 2021-03-01 00:00:00.000
2021-03-02 2021-03-01 00:00:00.000 2021-04-01 00:00:00.000
2021-03-03 2021-03-01 00:00:00.000 2021-04-01 00:00:00.000
推荐阅读
- django - Django ImageKit 在管理站点内更改图像尺寸
- python - 如何实现我自己的搜索过滤器 - Django?
- python - Nearest latitude and longitude points in python
- reactjs - react-router-dom V6 中的嵌套路由
- python - 如何使用 IB API 获取当前价格
- javascript - 使用 .reduce() 将数组转换为对象
- spring-kafka - Spring kafka 2.7.8 的 setAckOnError() 方法
- jwt - 如何从 base64 结束字符串创建 Java Key 对象,以便使用 JJWT 进行 PS256 解析
- spring-boot - Spring将保存到数据库与另一个实例同步
- java - 如何将成员添加到数组列表的后面或前面