2016-01-02 51 views
0

好吧,我想要得到一個棘手的問題。我有一個使用PHP的日曆計劃器,其中有人計劃他們的假期。從隨機長度列表中的第一個和最後一個號碼

在數據庫中,它看起來像這樣: 每個人都使用date(z) - 僅限於天數來排序休假日的列表。

所以以dBASE它可以看起來像這樣:

4 
5 
6 
7 
22 
23 
24 
25 
52 

輸出應該給與的工作天數都放假期間,在年底總結的列表。所以,這樣的事情:

4-7 (4) 
22-25 (2) 
52 (1) 
------ 
Sum (7) 

我已經得到了計算工作日的工作功能,因此它是由我,但人有一個想法如何從每個這樣的時間段的第一和最後一天?

+0

在'數據庫'中,它可以代替日期嗎? – Strawberry

+0

找到left.day = right.day + 1上的第一天離開自己,得到right爲null的位置(類似於查找最後一天) – amdixon

回答

0

您可以使用此查詢獲取結果的第一部分。

select CONCAT(min(day), '-', max(day), ' (', max(day)-min(day)+1, ')') as result 
FROM 
(
select day, @curRow := @curRow + 1 as row_number, day - @curRow FROM days d JOIN (SELECT @curRow := 0) r 
) A group by day - row_number; 

這個查詢提供總和:

SELECT CONCAT('Sum (', CAST(SUM(results) as CHAR(20)), ')') as results FROM 
(
    select max(day) - min(day) + 1 as results FROM 
    (
    select day, @curRow := @curRow + 1 as row_number, day - @curRow FROM days d JOIN (SELECT @curRow := 0) r 
) A group by day - row_number 
) B 

如何這項工作的說明,請參見this post

相關問題