Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何回顾过去的12个月?_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql 如何回顾过去的12个月?

Sql 如何回顾过去的12个月?,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我需要创建一份只检查前12个月的报告。我有这个代码,它正在工作: DECLARE @date DATETIME = DATEADD(year,-1,GETDATE()) WHILE @date < GETDATE() BEGIN --do marvelous things SET @date = DATEADD(MONTH,1,@date) END DECLARE@date DATETIME=DATEADD(year,-1,GETDATE()) 而@date

我需要创建一份只检查前12个月的报告。我有这个代码,它正在工作:

DECLARE @date DATETIME = DATEADD(year,-1,GETDATE())
WHILE @date < GETDATE()
BEGIN
    --do marvelous things
    SET @date = DATEADD(MONTH,1,@date)
END
DECLARE@date DATETIME=DATEADD(year,-1,GETDATE())
而@date
……然而,它从2014年6月开始恢复了业绩(显然,今天是2015年6月)

我希望代码能够从2015年6月开始返回结果,然后向后工作到2014年6月,但不知道如何做到这一点


我正在使用SQL Server 2012。

在查询中使用
ORDER BY
子句。例如:

select * from your_table where date_col between @start_date and @end_date order by date_col desc;
ASC
DESC
可用于按升序或降序显示结果

因为,您正在循环您的
SQL
查询。那么

改变

DECLARE @date DATETIME = DATEADD(year,-1,GETDATE())

SET @date = DATEADD(MONTH,1,@date)


首先,在SQL中执行操作时,循环通常是错误的方法。SQL是面向集合的,只需一条语句,无需循环,就可以完成奇妙的事情。那么,你到底想做什么?按COL_NAME desc订购
SET @date = DATEADD(MONTH,1,@date)
 SET @date = DATEADD(MONTH,-1,@date)  // substracting one month after each iteration.
DECLARE @date DATETIME = GETDATE()
WHILE @date > DATEADD(year,-1,GETDATE())
BEGIN
    --do marvelous things
    SET @date = DATEADD(MONTH,-1,@date)
END