我们的表格“ LN详情”具有以下数据。
**ACTG PRD CASE ID DEC**
202004 101 Flexible
202003 105 Non Flexible
202004 106 Flexible
202003 101 Non Flexible
202004 109 Flexible
现在,我们希望desc是“灵活的”并在当前期间添加,而这些情况不应该在上一个期间中。这里的案例101是当前期202004和202003。因此我们不希望在结果数据中使用这是预期的输出:
**ACTG PRD CASE ID DEC**
202004 106 Flexible
202004 109 Flexible
在表名或列名中都添加空格绝不是一个好主意;在案例列名称(如Case或DEC)中也不应使用SQL关键字;而是使用下划线代替空格。但是,由于您的空格,我的答案包括需要的方括号。
Select * from [LN DETAILS]
where [LN DETAILS].[ACTG PRD]=(
select Str(DATEPART(yyyy,GETDATE()),4)+ case when DATEPART(mm,GETDATE())<10
Then Str(0,1)+Str(DATEPART(mm,GETDATE()),1)
Else Str(DATEPART(mm,GETDATE()),2) end)
and [LN DETAILS].[DEC]='Flexible'
从上方更新,不返回前一个ONLY月份中包含一个的Case_ID。太长了,因为您的dateField是文本。
Select * from [LN DETAILS] t1
where not exists (
select * from [LN DETAILS] t2
where t1.[Case ID]=t2.[Case ID]
and t1.[ACTG PRD]=(
select Str(DATEPART(yyyy,GETDATE()),4)+ case when DATEPART(mm,GETDATE())<10
Then Str(0,1)+Str(DATEPART(mm,GETDATE()),1)
Else Str(DATEPART(mm,GETDATE()),2) end)
and t2.[ACTG PRD]=(
select Str(DATEPART(yyyy,Dateadd(month,-1,getdate())),4)+ case when DATEPART(mm,Dateadd(month,-1,getdate()))<10
Then Str(0,1)+Str(DATEPART(mm,Dateadd(month,-1,getdate())),1)
Else Str(DATEPART(mm,Dateadd(month,-1,getdate())),2) end) )
and t1.[ACTG PRD]=(
select Str(DATEPART(yyyy,GETDATE()),4)+ case when DATEPART(mm,GETDATE())<10
Then Str(0,1)+Str(DATEPART(mm,GETDATE()),1)
Else Str(DATEPART(mm,GETDATE()),2) end)
and t1.[DEC]='Flexible'