mysql使用内部连接根据数据库中的日期范围显示数据
Posted
技术标签:
【中文标题】mysql使用内部连接根据数据库中的日期范围显示数据【英文标题】:mysql display data based on date range from database using inner join 【发布时间】:2019-11-20 12:09:46 【问题描述】:我有两个表事件和会话,看起来像这样
事件表
会话表
我想根据日期范围显示数据
这是我的解决方案
SELECT sessions.sid, events.datetime, count(*) as num_rows,
count(distinct sessions.sid) as sessions,
sum( targetbuttonname = 'kredyt' ) as num_kredyt,
sum( targetbuttonname = 'konto' ) as num_konto,
sum( targetbuttonname = 'czat' ) as num_czat,
sum( targetbuttonname = 'video-voice_btns' ) as num_voice,
sum( targetbuttonname = 'video-close_btn' ) as num_close,
sum( targetbuttonname = 'video-muted_btn' ) as num_muted,
sum( targetbuttonname = 'video-play_btn' ) as num_play,
sum( targetbuttonname = 'video-pause_btn' ) as num_pause,
sum( targetbuttonname = 'video-replay_btn' ) as num_replay,
sum(watchtime) as num_watchtime,
sum(devicetype ='Computer') as num_computer from events
INNER JOIN sessions ON (events.sid =sessions.sid)
WHERE datetime BETWEEN '2019-11-11' AND '2019-11-21'
不幸的是,当我在 phpmyadmin 上运行脚本时,出现以下错误
1052 - 列:where 子句中的“日期时间”不明确
我的代码做错了什么?
这里是 jsfiddle demo
【问题讨论】:
所以用它来自的表名来限定它。事实上,限定所有列引用,以便清楚它们来自哪里——对于编译器和人员。 datetime 在两个表中,只需添加table.column
。例如:sessions.datetime
【参考方案1】:
您的两个表中都有“日期时间”列。所以当你说:
INNER JOIN sessions ON (events.sid = sessions.sid)
WHERE datetime BETWEEN '2019-11-11' AND '2019-11-21'
它不知道您的“日期时间”指的是哪个表。
您需要做的是引用您正在使用的表中的列,例如:
INNER JOIN sessions ON (events.sid = sessions.sid)
WHERE sessions.datetime BETWEEN '2019-11-11' AND '2019-11-21'
或者喜欢:
INNER JOIN sessions ON (events.sid = sessions.sid)
WHERE events.datetime BETWEEN '2019-11-11' AND '2019-11-21'
【讨论】:
【参考方案2】:根据您要考虑的日期时间使用WHERE events.datetime BETWEEN '2019-11-11' AND '2019-11-21'
或WHERE sessions.datetime BETWEEN '2019-11-11' AND '2019-11-21'
。
两个表中都存在名称为 datetime
的列,因此您必须限定列名。
【讨论】:
以上是关于mysql使用内部连接根据数据库中的日期范围显示数据的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 中的 Pivot - 根据日期时间列显示第一个和最后一个值
在MYSQL中将日期转换为日期范围---如何处理日期中的间隙