在SQL中按年末提取或分组

时间:2016-05-12 09:25:24

标签: sql-server

使用此日期范围02/03/2014 - 03/20/2016如何使用sql生成此类结果

  

02/03/2014 - 2014年12月31日

     

01/01/2015 - 2015年12月31日

     

01/01/2016 - 03/20/2016

2 个答案:

答案 0 :(得分:1)

我们可以通过构建递归CTE来实现这一目标。

<强>查询

declare @startdate as date = '01/01/2014';
declare @enddate as date = '03/20/2016';

with dates as(  
    select dt = dateadd(yy, datediff(yy, 0, @startdate) + 1, -1)
    where dateadd(yy, 1, @startDate) <= @endDate
    union all
    select dateadd(yy, 1, dt)
    from dates
    where dateadd(yy, 1, dt) <= @endDate
)
select cast(dt as date) as dt
from dates
union
select @enddate;

Find a working demo here

答案 1 :(得分:0)

$ g++ --version
g++-5 (Ubuntu 5.3.0-3ubuntu1~14.04) 5.3.0 20151204
Copyright (C) 2015 Free Software Foundation, Inc.

$ clang++-3.7 --version
Debian clang version 3.7.1-svn254351-1~exp1 (branches/release_37) (based on LLVM 3.7.1)
Target: x86_64-pc-linux-gnu
Thread model: posix

$ uname -a
Linux ****** 3.13.0-86-generic #130-Ubuntu SMP Mon Apr 18 18:27:15 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

---以上查询可能会为您提供所需的结果。