MySQL:查询已加入日期列表,但如何在每个日期显示多个条目

时间:2012-08-15 10:59:40

标签: 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') 

嵌套的选择查询按照我自己的运行方式执行。此查询有几个问题:

- 选择了批处理表中的每个字段,但由于这是针对iReport的,因此问题不是太多

- 我得到了4月1日到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

1 个答案:

答案 0 :(得分:0)

我个人会创建一个单独的“日期”表,并填写所有日期,从2000年1月1日到12月31日(或任何日期范围将涵盖所有潜在的查询),然后进行左连接从该表到批处理和epiRun表。

我认为这是一种更清洁的方式来做你想要的,并会给你你想要的结果。