我的查询如下:
select a.ID,
a.Date_Reported,
b.Date_Received
from tx_ext a
join tx b on b.id = a.id
AND b.Date_Reported >= convert( datetime, '2018-05-01' )
AND b.Date_Reported <= convert( datetime, '2018-05-31' )
如您所见,我目前正在手动设置五月(上个月)的日期。如何更改我的查询,无论我在哪个月,我总是在上个月运行。所以例如这个月是六月,所以我想从五月开始运行价值。下个月是7月,所以我想跑6月。
我想自动执行此操作,因此我不需要每月手动输入日期
感谢
答案 0 :(得分:1)
您可以使用:
select a.ID,
a.Date_Reported,
b.Date_Received
from tx_ext a
join tx b on b.id = a.id
AND b.Date_Reported >= DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
AND b.Date_Reported <= EOMONTH(GETDATE());
<强> DBFiddle Demo 强>
请注意,结束日期为30/06/2018 00:00:00
,因此我假设您将Date_Reported存储为DATE(而不是DATETIME)。如果你有时间,你需要改为:
AND b.Date_Reported < DATEADD(d,1,EOMONTH(GETDATE()))
select a.ID,
a.Date_Reported,
b.Date_Received
from tx_ext a
join tx b on b.id = a.id
AND b.Date_Reported>=DATEADD(month,-1,DATEADD(month,DATEDIFF(month,0,GETDATE()),0))
AND b.Date_Reported<DATEADD(d,1,EOMONTH(GETDATE(),-1)) ;
答案 1 :(得分:1)
也考虑这个表单(它可以在较旧的SQL Server版本中使用)。
select a.ID,
a.Date_Reported,
b.Date_Received
from tx_ext a
join tx b on b.id = a.id
AND YEAR(b.Date_Reported) = CASE WHEN MONTH(GETDATE()) = 1
THEN YEAR(GETDATE()) - 1
ELSE YEAR(GETDATE())
END
AND MONTH(b.Date_Reported = CASE WHEN MONTH(GETDATE()) = 1
THEN 12
ELSE MONTH(GETDATE()) - 1
END