2012-02-20 106 views
1

我有2代表的結構與DATEDIFF日期格式

Emp Table 

id name 

001 Smith 
002 Jerry 


Leave 
sr.no reason  from_date  to_date  request_by status 
1  PL   2011-12-11  2011-12-15  001  Declined 

2  PL   2011-11-13  2011-11-13  001  Approved 

3  PL   2011-10-02  2011-10-05  002  Declined 

現在我已經寫了這個查詢

select DATEDIFF(Leave.from_date,Leave.to_date)as cdate, 
Emp.id as emp 
from Leave left join Emp 
on Leave.request_by=Emp.id 

給我差這兩個日期之間等...

cdate emp 
-4  001 
    0  001 
-3  002 

「2011-12-11 & 2011-12-15」之間的輸出差異的第一件事情需要是5連續幾天員工缺席。我們實現了它。

但我需要日期格式如('%Y%m%d')和+如果日期差異是說-4,那麼應該顯示4條記錄。 所以我想編寫一個查詢這給像這樣的輸出......

cdate   emp 
2011-12-11  001 
2011-12-12  001 
2011-12-13  001 
2011-12-14  001 
2011-12-15  001 
2011-11-13  001 
2011-10-02  002 
2011-10-03  002 
2011-10-04  002 
2011-10-05  002 

所以任何人可以告訴我,我應該怎麼需要寫我的查詢來獲取這個輸出?

回答

2

嘗試此查詢 -

CREATE TABLE temp_days(d INT(11)); 
INSERT INTO temp_days VALUES 
    (0),(1),(2),(3),(4),(5), 
    (6),(7),(8),(9),(10), 
    (11),(12),(13),(14),(15); -- maximum day difference, add more days here 

SELECT l.from_date + INTERVAL td.d DAY cdate, e.id emp 
FROM 
    `leave` l 
LEFT JOIN Emp e 
    ON l.request_by = e.id 
JOIN temp_days td 
    ON DATEDIFF(l.to_date, l.from_date) >= td.d 
ORDER BY 
    e.id 
+0

它的工作......謝謝!!!! – Java 2012-02-20 12:08:10

+0

這是一個非常簡單的方法。我感覺非常愚蠢,因爲我一直使用JOIN預填充「日期」表。 – nnichols 2012-02-20 12:31:27

+0

還有一件事,如果我想顯示這個輸出的特定狀態,如狀態是'Approved',那麼只顯示記錄,在這種情況下如何寫入查詢?(請參見離開表) – Java 2012-02-20 12:31:44