2014-09-19 152 views
0

好吧,你所有的SQL master和Jedi的,這裏是我的問題和請求SQL SSMS中的case語句。SQL - 支付週期的日期範圍

我有年的日期。

所以每行的日期是從03/24/2013開始到今天。

我希望每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
  • 2013年3月24日----- 2013年4月12日
  • 2013年3月25日2013年4月12日-----
  • 2013年3月26日2013年4月12日-----
  • 2013年3月27日----- 4/12/2013
  • 3/28/2013 ----- 4 /二千零十三分之十二
  • 2013年3月29日----- 2013年4月12日
  • 二零一三年三月三十零日----- 2013年4月12日
  • 2013年3月31日--- --4 /二千零十三分之十二
  • 2013年4月1日2013年4月12日-----
  • 2013年4月2日2013年4月12日-----
  • 4/3/2013 ----- 2013年4月12日
  • 2013年4月4日----- 2013年4月12日
  • 2013年4月5日----- 2013年4月12日
  • 4/6/2013 ----- 2013年4月12日
  • 2013年4月7日2013年4月26日-----
  • 2013年4月8日2013年4月26日-----
  • 2013年4月9日----- 4 /二千○十三分之二十六
  • 2013年4月10日2013年4月26日-----
  • 2013年4月11日2013年4月26日-----
  • 2013年4月12日 - --- 2013年4月26日
  • 2013年4月13日----- 2013年4月26日
  • 2013年4月14日----- 2013年4月26日
  • 4/15/2013 ----- 4/26/2013
  • 2013年4月16日2013年4月26日-----
  • 2013年4月17日2013年4月26日-----
  • 2013年4月18日----- 4 /二千〇一十三分之二十六
  • 2013年4月19日----- 2013年4月26日
  • 2013年4月20日----- 2013年4月26日
  • 2013年4月21日--- - 2013/5/10

希望這是有道理的。

+0

對我沒有意義。我發現你的整個問題都不清楚。 – 2014-09-19 02:26:02

+0

是4/12/2013的基準日期嗎? – hallie 2014-09-19 02:26:32

+0

@DanBracuk認爲工資 - 他試圖找到人們得到支付的日期 – Jeff 2014-09-19 02:26:56

回答

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,因爲我處於某種事情的中間,但這應該足以開始。

+0

Jeff,謝謝您的回覆。我將此添加到Select語句:case min(a.StrDate)> = '03/24/2013'時,則min(a.strdate)+19結束PayPeriodDate .............. .......這給了第一個日期2013年12月4日,但作爲聲明是自我解釋,它只是增加日期 – 2014-09-19 02:33:21

+0

@RahulP是的,你真的需要建立'payDate'表 - 你會想查看你使用的任何SQL技術的循環。我建議在未來使用它,而不是嘗試在你的程序中做一個奇特的計算,但是然後我是一個數據倉庫有點... – Jeff 2014-09-19 02:39:53

+0

傑夫,謝謝你的建議。但是,我更多是具有隻讀訪問權限的財務/決策支持。我的SQL知識僅限於「自學」。所以,創建一張新桌子會有點不合我的聯盟。我的IT部門很漂亮,可以說,忙碌而無益。大聲笑。我使用巨大的dB運行查詢以在Tableau中創建儀表板。現在,這可能是一種選擇,因爲Tableau是一個分析系統。我可能會嘗試更多的計算,看看有沒有什麼工作。感謝你的寶貴時間。 – 2014-09-19 03:42:10

0

爲了從Awesome StackOverflow中獲取提示並從Jeff提出建議,我繼續創建一個Temp表並讓查詢工作。我現在使用Temp表的下面的代碼並在日期中進行Inner Join並在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