拉上一年的月初数据

时间:2016-08-17 12:23:09

标签: sql

我是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())

有人可以帮忙吗?修复这个或任何完全不同的查询?

提前谢谢

2 个答案:

答案 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())))

sqlmag.com

有一个很好的备忘单

答案 1 :(得分:0)

你可以稍微清理一下。我这样格式化,所以你可以看到逻辑。希望它有所帮助。

SELECT * FROM [YourTable]
WHERE CreationDate 
    BETWEEN 
        DATEADD(year, -1, GETDATE()-(DATEPART(d, GETDATE()- 1))) 
    AND 
        DATEADD(year, -1, GETDATE() - 1)