2013-12-10 20 views
0

我有一個MySQL記錄這樣MySQL的日期擊穿

name sdate  edate 
John 2013-12-01 2013-12-04 
Will 2013-12-04 2013-12-06 
Smith 2013-12-02 2013-12-05 

我需要一個單獨的查詢像這樣

name stay_date 
John 2013-12-01 
John 2013-12-02 
John 2013-12-03 
John 2013-12-04 
Will 2013-12-04 
Will 2013-12-05 
Will 2013-12-06 
Smith 2013-12-02 
Smith 2013-12-03 
Smith 2013-12-04 
Smith 2013-12-05 

很多感謝名單提前結果..

+0

採取掠奪在此,同樣的問題: HTTP://計算器的.com /一個/1675233分之10432083 – Mehdi

回答

0

對於這需要一個計數(數字)表,您可以通過以下方式創建和填充

CREATE TABLE tally(n INT NOT NULL PRIMARY KEY); 
INSERT INTO tally(n) 
SELECT a.N + b.N * 10 + 1 n 
FROM 
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a 
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b 
ORDER BY n; 

現在,您的查詢可能看起來像

SELECT name, sdate + INTERVAL n.n - 1 DAY stay_date 
    FROM table1 t JOIN tally n 
    ON n.n <= edate - sdate + 1 

輸出:

 
+-------+------------+ 
| name | stay_date | 
+-------+------------+ 
| John | 2013-12-01 | 
| John | 2013-12-02 | 
| John | 2013-12-03 | 
| John | 2013-12-04 | 
| Will | 2013-12-04 | 
| Will | 2013-12-05 | 
| Will | 2013-12-06 | 
| Smith | 2013-12-02 | 
| Smith | 2013-12-03 | 
| Smith | 2013-12-04 | 
| Smith | 2013-12-05 | 
+-------+------------+ 

這裏是SQLFiddle演示