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中将日期转换为日期范围---如何处理日期中的间隙

MySQL的连接数

php mysql怎样根据数据库表中的出生日期搜索出年龄大于65岁的记录

数据库