Mysql 如何内部联接日历表以获取完整的日历日期+;来自其他表的我的查询结果

Mysql 如何内部联接日历表以获取完整的日历日期+;来自其他表的我的查询结果,mysql,Mysql,我有一张设置了完整日历日期的“日历表”: dt -------------------------- 2014-07-09 2014-07-10 2014-07-11 2014-07-12 2014-07-13 2014-07-14 etc..... 我有另一个带有列的表“活动”: aveHR duration date ------------------------------ 74 91 2014-08-02 59 25

我有一张设置了完整日历日期的“日历表”:

dt
--------------------------
2014-07-09
2014-07-10
2014-07-11
2014-07-12
2014-07-13
2014-07-14 etc.....
我有另一个带有列的表“活动”:

aveHR   duration    date
------------------------------
74      91          2014-08-02
59      25          2014-07-31
59      27          2014-07-28
59      27          2014-07-25
59      27          2014-07-22
我想加入我的日历_表,以获得完整的连续日期范围,以填充其他_表中缺少的日历日期(第一个值(2014-07-22)到最后一个值(2014-08-02))

如果我跑步:

SELECT aveHR, duration, date FROM `activity`
我得到:

74      91          2014-08-02
59      25          2014-07-31
59      27          2014-07-28
59      27          2014-07-25
59      27          2014-07-22
我想要实现的是从2014-07-22到2014-08-02的连续每日日期。即2014-07-222014-07-232014-07-242014-07-262014-07-272014-07-282014-07-292014-07-302014-07-312014-08-012014-08-02

其中,“活动”中的匹配日期显示其各自的aveHR和持续时间数据,与此不匹配的日期仅显示日期

SELECT aveHR, duration, date, calendar.dt FROM `activity`
INNER JOIN calendar
ON activity.date WHERE date BETWEEN "first and last date from activity.date"

这不起作用,我不知道如何获得高于任何想法的结果?

您可以尝试使用
左连接。比如:

SELECT cal.dt, aveHR, duration, date FROM calendar cal
LEFT JOIN `activity` act ON act.date = cal.dt
WHERE dt BETWEEN 
(SELECT MIN(date) FROM activity)
and (SELECT MAX(date) FROM activity);

确定:如果第一个和最后一个日期之间的日期-第一个和最后一个日期列不存在,则必须从同一个查询中动态选择它们,我已修改查询以从
活动
表中获取最小和最大日期。这就是你想要的吗?太棒了!除了我的activity.date格式是:2014-08-02 11:08:24,我的calendar dt格式是:2014-08-02-我尝试了:substr(activity.date,0,10),但它给了我空值date。你可以使用date()函数从datetime字段获取日期。看看这个:工作完美!非常感谢!