Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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_Database - Fatal编程技术网

Sql 如何获取从当前日期算起的最后12个月

Sql 如何获取从当前日期算起的最后12个月,sql,sql-server,database,Sql,Sql Server,Database,我有一个名为CouponData和Edate列的表 我想从当前日期算起最后12个月。从2018年9月21日到2017年9月1日,如何使用我的查询 with yearlist as ( select MONTH(GETDATE()) as MONTH union all select yl.MONTH - 1 as MONTH from yearlist yl where (yl.MONTH - 1 <= MONTH(GetDate())) and (yl.MONTH -

我有一个名为CouponData和Edate列的表

我想从当前日期算起最后12个月。从2018年9月21日到2017年9月1日,如何使用我的查询

with yearlist as  
( 
select MONTH(GETDATE()) as MONTH 
union all 
select  yl.MONTH - 1 as MONTH 
from yearlist yl 
where (yl.MONTH  - 1 <= MONTH(GetDate())) and  (yl.MONTH - 1 >=   MONTH(DATEADD(MONTH ,-8,GETDATE()))) 
) 
Select  month,(Select IsNull(Sum(BillAmount),0) from CouponData Where month(EDate) = YL.month) 
as Collection,(Select IsNull(Sum(AdultsQty+ChildQty),0) from CouponData Where month(EDate) = YL.month) 
as PaxTotal  from yearlist YL order by MONTH  asc 

我不太清楚你的射程是什么意思。现在还不到12个月。但是,我建议您使用日期:

所有月份:

WITH totals
AS (SELECT MONTH(edate) AS [month],
           SUM(BillAmount) AS bamt,
           SUM(AdultsQty + ChildQty) AS qty
    FROM CouponData
    WHERE edate >= DATEADD(YEAR, -1, GETDATE())
    GROUP BY MONTH(edate))
SELECT m.mno AS [Month],
       ISNULL(bamt, 0) AS Collection,
       ISNULL(qty, 0) AS PaxTotal
FROM
(
    VALUES
        (1),(2),(3),
        (4),(5),(6),
        (7),(8),(9),
        (10),(11),(12)
        ) m (mno)
    LEFT JOIN totals t
        ON t.month = m.mno
ORDER BY m.mno;

你不能用几个月的时间来工作,你也需要考虑一年的时间。
with yearlist as  
( 
select MONTH(GETDATE()) + 12 * year(GETDATE()) as MONTH 
union all 
select  yl.MONTH - 1 as MONTH 
from yearlist yl 
where yl.MONTH  - 1 >= MONTH(GETDATE()) + 12 * year(GETDATE()) -12 
) 
Select  month /12 as 'year', month % 12 as 'month',(Select IsNull(Sum(BillAmount),0) from CouponData Where month(EDate)+ YEAR(EDate) * 12 = YL.month) 
as Collection,(Select IsNull(Sum(AdultsQty+ChildQty),0) from CouponData Where month(EDate) + YEAR(EDate) * 12 = YL.month) 
as PaxTotal  from yearlist YL order by MONTH  asc ; 

您可以使用以下查询获取日期范围。替换开始日期

DECLARE @Joiningdate DATE
Declare @StartDate DATE= cast('2017/09/01' as datetime) 
Declare @EndDate DATE=getdate()

SET @StartDate = dateadd(DAY,-365 ,getdate()) 
print @StartDate
;with DateRange As
(
SELECT  TOP (DATEDIFF(DAY, @StartDate, @EndDate) + 1)
        Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @StartDate),'' as NoOfday
FROM    sys.all_objects a
        CROSS JOIN sys.all_objects b
)select * from DateRange

你想从当前日期算起的最后12个月是什么意思?是否要将今天到2019-09-20之间的每个日期都保存在数据集中?请使用datediff函数。@Larnu。。她想要过去的日期。@Larnu想要从当前日期算起的最后12个月是指2018年9月21日到2017年9月1日,因为2018年9月=1日,2018年8月=2日,2018年7月=3日……2017年9月=12@gordon错误:'eomonth'不是可识别的内置函数名。@aparnarai。eomonth在SQL Server中已存在多年:。如果我在第4个月没有可用数据,则第4个月应为0???@aparnarai,则第4个月不应存在。如果您希望所有月份都存在,那么只需使用值1、2、。。。12个月。@aparnarai,为您添加了所有月份。您的ans对我非常有用,但问题是我的月份是1,2,3,4,5,6,7,8,9,9,10,11,12。我能得到1,2,3,4,5,6,7,8,9,11,10,9吗?
with yearlist as  
( 
select MONTH(GETDATE()) + 12 * year(GETDATE()) as MONTH 
union all 
select  yl.MONTH - 1 as MONTH 
from yearlist yl 
where yl.MONTH  - 1 >= MONTH(GETDATE()) + 12 * year(GETDATE()) -12 
) 
Select  month /12 as 'year', month % 12 as 'month',(Select IsNull(Sum(BillAmount),0) from CouponData Where month(EDate)+ YEAR(EDate) * 12 = YL.month) 
as Collection,(Select IsNull(Sum(AdultsQty+ChildQty),0) from CouponData Where month(EDate) + YEAR(EDate) * 12 = YL.month) 
as PaxTotal  from yearlist YL order by MONTH  asc ; 
DECLARE @Joiningdate DATE
Declare @StartDate DATE= cast('2017/09/01' as datetime) 
Declare @EndDate DATE=getdate()

SET @StartDate = dateadd(DAY,-365 ,getdate()) 
print @StartDate
;with DateRange As
(
SELECT  TOP (DATEDIFF(DAY, @StartDate, @EndDate) + 1)
        Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @StartDate),'' as NoOfday
FROM    sys.all_objects a
        CROSS JOIN sys.all_objects b
)select * from DateRange