繁体   English   中英

MySQL为表中的特定ID选择两个时间戳列之间的平均时差

[英]MySQL select the average timedifference between two timestamp columns for a particular id in a table

我的表visits如下所示:

+--------------+-------------+------+-----+---------------------+----------------+
| Field        | Type        | Null | Key | Default             | Extra          |
+--------------+-------------+------+-----+---------------------+----------------+
| id           | int(11)     | NO   | PRI | NULL                | auto_increment |
| vis_id       | int(11)     | NO   | MUL | NULL                |                |
| unit         | int(11)     | NO   | MUL | NULL                |                |
| time_in      | timestamp   | NO   | MUL | CURRENT_TIMESTAMP   |                |
| time_out     | timestamp   | NO   | MUL | 0000-00-00 00:00:00 |                |
| in_username  | varchar(16) | NO   | MUL | NULL                |                |
| out_username | varchar(16) | NO   | MUL | NULL                |                |
+--------------+-------------+------+-----+---------------------+----------------+

我用它来跟踪访客进出我的建筑物。

我想要的是能够看到特定访问者的“平均访问时间”(以小时为vis_id )(由vis_id定义)。 如果平均访问时间少于一小时,则应四舍五入为1。

这是我想要输出的示例:

+--------+------+----------+
| vis_id | unit | avg_time |
+--------+------+----------+
|    156 |  216 | 5        |
|   1230 |  103 | 2        |
|    533 |  112 | 1        |  
|    802 |  201 | 3        |
|   1445 |  431 | 4        |
+--------+------+----------+

建议?

使用AVG()分组功能。 据我所知,您将需要两个分组字段,如下所示:

SELECT 
  vis_id,
  unit,
  ROUND(AVG((UNIX_TIMESTAMP(time_out)-UNIX_TIMESTAMP(time_in))/3600)) AS avg_time
FROM
  visits
GROUP BY
  vis_id,
  unit

请注意,由于您尚未定义处理非整数值的规则,因此我使用ROUND() ROUND()将使用代数法则,但是可能您希望删除非整数部分。 然后查看FLOOR() -或改为添加整数部分(即四舍五入到最大)-然后查看CEIL()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM