2012-08-15 59 views
0

我有一個查詢,看起來像(我試着去掉不相關的領域/加入爲清楚起見):的MySQL:查詢加入列出的日期,但我怎麼顯示每個日期的多個條目

SET @num = -1; 
SELECT 
*, 
CAST(DATE_ADD('2012-04-01', interval @num := @num+1 day)AS DATE) AS date_sequence, 
DAYOFWEEK(DATE_ADD('2012-04-01', interval @num+1 day)) AS day_week 
FROM batch AS b1 

left join (
select 
batch.`startedDate` AS batch_startedDate, 
epiRun.`runType` AS epiRun_runType 
.... other fields selected......... 
from batch 
left join `epiRun` epiRun ON epiRun.`batchID`= batch.`keyID` 
.......other joins........ 
WHERE batch.`startedDate` >= '2012-04-01' AND batch.`startedDate` <= '2012-04-18' 
ORDER BY batch.`startedDate`ASC) 
AS b2 ON cast((b2.`batch_startedDate`) AS DATE)=CAST(DATE_ADD('2012-04-01', interval @num+1 
day)AS DATE) 

WHERE 
(DATE_ADD('2012-04-01', interval @num+1 day) <= '2012-04-18') 

嵌套選擇查詢按照我自己運行時的預期執行。此查詢有幾個問題:

從批表

-Every場中選擇,但由於這是一個iReport的這不是一個太大的問題

的-I得到1日期列表4月到4月18日,但如果我每天有多個批次,那麼我只會顯示一個批次 - 理想情況下,我希望日期列中有多個相同的條目,每個批次都有唯一的條目。我可以看到有沒有批次的日子,這一點很重要。表

比如我有:

Date   Batch 
01/04/2012 TS01 
02/04/2012 TS03 
03/04/2012 null 

,並希望我生成:

Date   Batch 
01/04/2012 TS01 
01/04/2012 TS02 
02/04/2012 TS03 
02/04/2012 TS04 
03/04/2012 null 

回答

0

我個人會創建一個單獨的「日期」表,並與所有的日期來填充它從2000年1月1日到2015年12月31日(或任何日期範圍將涵蓋所有潛在查詢),然後從該表執行左連接到批處理表和epiRun表。

我認爲這是一種更乾淨的方式來做你正在尋找的東西,並會給你你想要的結果。

+0

謝謝。我沒有對數據庫的寫入權限,但我會要求添加日期表並查看我如何繼續。 – user1600368 2012-08-17 08:21:42

相關問題