SQL - 支付期间的日期范围

时间:2014-09-19 02:18:31

标签: sql date

好的所有SQL主人和Jedi,这是我的问题,并在SQL SSMS中请求一个case语句。

我有一年的约会。

所以每行的日期从2013年3月24日开始,直到今天。

我希望每14天就被称为04/12/2013。

So from 03/24/2013 thru 04/06/2013 would be all 04/12/2013 and
from 04/07/2013 thru 04/20/2013 would be 04/26/2013 and
from 04/21/2013 thru 05/04/2013 would be 05/10/2013 and so on.

下面是一个给你一个想法的集合:

  • 日期------ PayDate
  • 3/24/2013 ----- 4/12/2013
  • 2013年3月25日----- 4/12/2013
  • 3/26/2013 ----- 4/12/2013
  • 2013年3月27日----- 4/12/2013
  • 2013年3月28日----- 4/12/2013
  • 2013年3月29日----- 4/12/2013
  • 2013年3月30日----- 4/12/2013
  • 2013年3月31日----- 4/12/2013
  • 2013年4月1日----- 4/12/2013
  • 2013年4月2日----- 4/12/2013
  • 2013年4月3日----- 4/12/2013
  • 2013年4月4日----- 4/12/2013
  • 2013年4月5日----- 4/12/2013
  • 2013年4月6日----- 4/12/2013
  • 2013年4月7日----- 4/26/2013
  • 2013年4月8日----- 4/26/2013
  • 2013年4月9日----- 4/26/2013
  • 4/10/2013 ----- 4/26/2013
  • 4/11/2013 ----- 4/26/2013
  • 2013年4月12日----- 4/26/2013
  • 2013年4月13日----- 4/26/2013
  • 2013年4月14日----- 4/26/2013
  • 2013年4月15日----- 4/26/2013
  • 2013年4月16日----- 4/26/2013
  • 2013年4月17日----- 4/26/2013
  • 2013年4月18日----- 4/26/2013
  • 2013年4月19日----- 4/26/2013
  • 2013年4月20日----- 4/26/2013
  • 2013年4月21日----- 5/10/2013

希望这是有道理的。

2 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点 - 我可能想要创建一个包含所有适当支付日期的表,然后使用相对简单的逻辑加入到该表中。

类似的东西:

select PayDate.date
from date
inner join PayDate on datediff(day, date.date, PayDate.date) > 18 AND datediff(day, date.date, PayDate.date) < 4

或者其他什么。我还没有找到确切的datediff,因为我处在某事的中间,但这应该足以开始了。

答案 1 :(得分:0)

从Awesome StackOverflow中获取提示并接受Jeff的建议,我继续创建一个Temp Table并让查询起作用。我现在使用下面的Temp表代码获取我需要的信息,并在Dates上进行内部联接,并在Select和Group By语句中包含PP日期。

希望这可以帮助其他人拥有数据库的只读权限。

   declare @temp  table
   (
   Date datetime,
   PPDate datetime
   )

   INSERT INTO @temp (Date, PPDate)
   SELECT '2013-2-10', '2013-3-1'
   UNION ALL SELECT '2013-2-11', '2013-3-1'
   UNION ALL SELECT '2013-2-12', '2013-3-1'
   ....
   ....
   UNION ALL SELECT '2013-2-23', '2013-3-1'
   UNION ALL SELECT '2013-2-24', '2013-3-15'
   ....
   ....
   UNION ALL SELECT '2013-3-8', '2013-3-15'
   UNION ALL SELECT '2013-3-9', '2013-3-15'
   UNION ALL SELECT '2013-3-10', '2013-3-29'
   UNION ALL SELECT '2013-3-11', '2013-3-29'
   ....
   ....
   UNION ALL SELECT '2013-3-22', '2013-3-29'
   UNION ALL SELECT '2013-3-23', '2013-3-29'
   UNION ALL SELECT '2013-3-24', '2013-4-12'

   select a.StrDate, t.PPDate, sum(Qty) Qty from tbl1 a
   Inner Join @temp t on t.date = a.StrDate
   group by a.StrDate, t.PPDate