其目标是基于由SQL查询创建的MTD日期列表提供月初至今(MTD)报告.然而,当我们在一个月的第一天时,我的查询不起作用(日期列表不相关)

我用来创建一个月到日日期列表的查询,稍后我将在一个内部联接查询中提取月到日事务.

DECLARE @Date1 DATE, @Date2 DATE
SET @Date1 = (SELECT dateadd(mm,-1, eomonth(getdate())))
SET @Date2 = GETDATE()

SELECT DATEADD(DAY,number+1,@Date1) [Date] 
FROM master..spt_values
WHERE type = 'P'AND DATEADD(DAY,number+1,@Date1) < @Date2
Order By [Date] ASC

现在我们发现自己在新的一个月的开始,我只是想要一份上个月的所有日期的 list ,即从1号到4月30号.

因此,我希望if/case子句能起到作用,但它不起作用.不知何故,这种日期比较并不奏效.下面是查询(请注意,我计划将此CASE子句添加到上面的查询中):

SELECT(CASE WHEN (SELECT GETDATE()) = (SELECT dateadd(mm, -1,dateadd(dd, +1, eomonth(getdate())))) THEN (SELECT dateadd(mm,-2,dateadd(dd, +1,eomonth(getdate()))))  ELSE(SELECT dateadd(mm, -1,dateadd(dd, +1, eomonth(getdate())))) END)

所以,总而言之,我想在查询1中添加一个CASE子句,这个CASE/IIF会将今天与任何给定月份的第一天进行比较,如果今天正好是当前月份的第一天,那么只需给我上一个月的第一天.但这种比较根本行不通.

推荐答案

-你在说什么?

 DECLARE @Date1 DATE, @Date2 DATE 
    SET @Date1 = (SELECT CASE 
         WHEN DAY(GETDATE()) = 1 
         THEN DATEADD(month, -1, DATEADD(day, 1 - DAY(GETDATE()), CAST(GETDATE() AS date)))
         ELSE DATEADD(day, 1 - DAY(GETDATE()), CAST(GETDATE() AS date))
       END
    ) 
SET @Date2 = GETDATE() 

SELECT DATEADD(DAY,number,@Date1) [Date] 
FROM master..spt_values 
WHERE type = 'P'
    AND DATEADD(DAY,number,@Date1) < @Date2 
ORDER BY [Date] ASC

输出:

Date
2023-04-01
2023-04-02
2023-04-03
2023-04-04
2023-04-05
2023-04-06
2023-04-07
2023-04-08
2023-04-09
2023-04-10
2023-04-11
2023-04-12
2023-04-13
2023-04-14
2023-04-15
2023-04-16
2023-04-17
2023-04-18
2023-04-19
2023-04-20
2023-04-21
2023-04-22
2023-04-23
2023-04-24
2023-04-25
2023-04-26
2023-04-27
2023-04-28
2023-04-29
2023-04-30

fiddle

Sql相关问答推荐

如何实现一个广泛的多级自连接PostgreSQL查询?

当有空单元格时,如何连接列

如何转换和汇总行数

转换表中的数据

按每天的最大值分组

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

如何使用SQL Server中的Nodes()方法执行与OPENXML相同的操作

缺少日期标识

从结果SQL查询中排除空值

需要从键-值对数据中提取值

如何在连接中使用三个不同的列,从而在PostgreSQL中只获得两个列?

最小非重复集的SQL查询

如何查询自引用 comments 表以查找带有回复的 comments ,并按最新回复排序?

如何在第二个 INSERT 中使用第一个 INSERT 自动生成的 ID

SQL ORACLE - 查找连续天数

如何根据 SQL Server 中 1 条语句中 SELECT 的结果进行 INSERT 或 UPDATE

达到特定值时,从0开始累加求和

如何在 SQL Server 中将 -13422.8450 舍入到 -13422.84

As400 (IBM i) SQL 表 QSYS2.SYSTABLES 上的元数据

超过100名员工的连续行