我是SQL的新手,我正在努力解决这个问题。希望以下是明确的。
我必须使用Excel sql导入从服务器中提取数据。
该表有一个包含日期的列,标题列的名称为:rept_date
这将是每日报告,我需要每天提取以下数据:上一年度,MTD数据,截至昨天:
如果今天是2016-08-17
,那么我需要
2015-08-01
(当月开始 - 1年)2015-08-16
(昨天 - 1年)我尝试了这个查询,但它不起作用,因为它让我回到了所有2015-08数据(直到31日),我不想要这样做:
Select * from "name of the table"
WHERE DATEPART(yyyy,rept_date) = DATEPART(yyyy,dateadd(yy,-1,GETDATE()))
AND DATEPART(m,rept_date) = DATEPART(m,GETDATE())
有人可以帮忙吗?修复这个或任何完全不同的查询?
提前谢谢
答案 0 :(得分:1)
SQL Server语法对于计算月份的第一个等有点奇怪:
WHERE -- first of LYM
rept_date >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()) - 12, '19000101')
AND -- start of the same day LY
rept_date < DATEADD(YEAR, -1, DATEADD(DAY, -0, DATEDIFF(DAY, 0, GETDATE())))
有一个很好的备忘单
答案 1 :(得分:0)
你可以稍微清理一下。我这样格式化,所以你可以看到逻辑。希望它有所帮助。
SELECT * FROM [YourTable]
WHERE CreationDate
BETWEEN
DATEADD(year, -1, GETDATE()-(DATEPART(d, GETDATE()- 1)))
AND
DATEADD(year, -1, GETDATE() - 1)