Re: [SQL ] 挑選連續不得中斷14天的日期

看板Database (資料庫)作者 (Mutex)時間6年前 (2018/05/01 21:13), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
再次感謝cutekid大大的伸手援助 http://sqlfiddle.com/#!18/458ff/5 WITH TB1 AS ( SELECT ITEMNAME, STARTDATE, ENDDATE, ROW_NUMBER() OVER (PARTITION BY ITEMNAME ORDER BY STARTDATE) AS NUM FROM T ), TB2 AS ( SELECT ITEMNAME, STARTDATE, ENDDATE, NUM FROM TB1 WHERE NUM = 1 UNION ALL SELECT T1.ITEMNAME, T1.STARTDATE, T2.ENDDATE, T2.NUM FROM TB2 T1 INNER JOIN TB1 T2 ON T1.ITEMNAME = T2.ITEMNAME AND T1.NUM + 1 = T2.NUM AND DATEDIFF(DAY,T1.ENDDATE,T2.STARTDATE) <= 14 ) SELECT ITEMNAME, MIN(STARTDATE), MAX(ENDDATE) FROM TB2 GROUP BY ITEMNAME OPTION (MAXRECURSION 0) 另外有興趣的人 cutekid大建議可以去找CTE的資料來看 WITH common_table_expression (Transact-SQL) Thanks. ※ 引述《Mutex (Mutex)》之銘言: : 資料庫名稱:MSSQL : 資料庫版本:2016 : 內容/問題描述:目前在計算某個物品(ITEMNAME)第一次使用與最後使用的日期 : 但是不同筆的使用紀錄,彼此之間不得超過14天 : 否則後面的資料就都不看 : 就只看前面符合條件的第一次與最後一次日期 : 資料範例如下,我把想要抓出來的日期用*表示: : ITEMNAME STARTDATE ENDDATE : A 20160101* 20160330* : A 20160420 20160720 : A 20160801 20161130 : B 20160101* 20160330 : B 20160407 20160707* : B 20160801 20161130 : C 20160201* 20160330 : C 20160407 20160707 : C 20160715 20161130* : D 20160101* 20160330* : 也就是說,希望可以得到的答案如下: : A 20160101 20160330 : B 20160101 20160707 : C 20160201 20161130 : D 20160101 20160330 : 忽然想到這個情境,但是卻思索不出個好解法 : 只好來請益,先謝謝高手了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.160.60.86 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1525180385.A.CE0.html
文章代碼(AID): #1Qw6VXpW (Database)
文章代碼(AID): #1Qw6VXpW (Database)