2012-02-20 4 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 

дает мне разницу между этими 2 датами, как ...

cdate emp 
-4  001 
    0  001 
-3  002 

Первое, что связано с этим разницей между «2011-12-11 & 2011-12-15« должно быть 5 лет 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

+0

Это действительно простой способ сделать это. Я чувствую себя довольно глупо, поскольку я всегда использовал JOIN для предварительно заполненной таблицы «дат». – nnichols

+0

еще одна вещь, если я хочу отобразить этот вывод для определенного статуса, например, если статус «Утвержден», тогда отображаются только записи, в этом случае, как писать запрос? (См. Таблицу «Оставить») – Java

Смежные вопросы