SQL函数最近12个月 [英] SQL function for last 12 months

查看:957
本文介绍了SQL函数最近12个月的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在查找一个SQL函数,该函数在过去的12个月中给出了开始日期和结束日期。假设您选择10.Dec,它会给出结果:

   -  StartDate  -  EndDate 
- 2013- 11-01 - 2013-11-30
- 2013-10-01 - 2013-10-31
- 2013-09-01 - 2013-09-30


我试着修改一个旧的我们有过的功能,但最后我完全失去了知觉和困惑。

  ALTER FUNCTION [dbo]。[Last12Months](@ Date date)返回表
AS
返回

with cte as(
SELECT DATEADD(mm,DATEDIFF(mm,01,@Date),01)AS Start,
DATEADD(mm,DATEDIFF(mm, - 12,@Date),-12)AS EndDate
union all
选择Start - 1,EndDate - 1从cte
开始> = @Date)
选择CAST以DATE开始)StartDate,CAST(EndDate as DATE)从cte结束日期)

像这样运行它:

  select * from dbo.Last12Months('2013-12-10')



得到:

   -  StartDate  -  EndDate 
- 2013-12-02 - 2013-12-20

任何人都知道该怎么办?

解决方案

请尝试使用CTE:

  ALTER FUNCTION [dbo]。[Last12Months] 

@Date datetime
)RETURNS @tbl TABLE(开始日期时间,结束日期时间)
AS

SELECT
DATEADD(month,DATEDIFF(month,0,@Date),0)AS开始,
DATEADD(d,-DAY(DATEADD( (date,date,date)),DATEADD(m,1,@ date))AS EndDate,
12 Cnt
UNION ALL
SELECT
DATEADD(month,-1,开始),
DATEADD(d,-DAY(DATEADD(m,1,Start-1)),DATEADD(m,1,Start-1)),
Cnt-1
FROM
T
WHERE
Cnt-1> 0

INSERT INTO @tbl
(Start,EndDate)
SELECT
Start,EndDate
FROM T

RETURN
END


I am looking for a SQL-function that gives the last 12 months with Start Date and End Date. Say you pick 10.Dec, it will give a result in:

 - StartDate   --   EndDate 
 - 2013-11-01  -  2013-11-30
 - 2013-10-01  -  2013-10-31
 - 2013-09-01  -  2013-09-30 

and so it goes for the last 12 months.

I tried modifying an old function we had, but I got totally off and confused in the end.

ALTER FUNCTION [dbo].[Last12Months](@Date date) RETURNS TABLE 
AS  
Return
( 
with cte as (
SELECT DATEADD(mm, DATEDIFF(mm, 01, @Date), 01) AS Start,
       DATEADD(mm, DATEDIFF(mm, -12, @Date), -12) AS EndDate
 union all
select Start - 1, EndDate - 1 from cte
where Start >= @Date )
select CAST(Start as DATE) StartDate, CAST(EndDate as DATE) EndDate from cte)

Runned it like this:

select * from dbo.Last12Months ('2013-12-10')

and got:

 - StartDate   -  EndDate 
 - 2013-12-02  -  2013-12-20

Anyone know what to do?

解决方案

Please try using CTE:

ALTER FUNCTION [dbo].[Last12Months]
(
    @Date datetime
)   RETURNS @tbl TABLE (Start datetime, EndDate datetime)
AS   
BEGIN
    WITH T AS(
    SELECT 
        DATEADD(month, DATEDIFF(month, 0, @Date), 0) AS Start,
        DATEADD(d, -DAY(DATEADD(m,1,@date)),DATEADD(m,1,@date)) AS EndDate,
        12 Cnt
    UNION ALL
    SELECT 
        DATEADD(month, -1, Start),
        DATEADD(d, -DAY(DATEADD(m,1,Start-1)),DATEADD(m,1,Start-1)),
        Cnt-1
    FROM
        T
    WHERE
        Cnt-1>0
    )
    INSERT INTO @tbl 
        (Start, EndDate)
    SELECT 
        Start, EndDate
    FROM T

    RETURN
END

这篇关于SQL函数最近12个月的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆