mysql - 计算持续时间百分比

标签 mysql sql

我有一个表格,每当状态发生变化时,它就会记录网站的 HTTP 状态代码,所以表格看起来像这样......

id    status                   date
-----------------------------------
1     404       2015-10-01 13:30:00
2     200       2015-10-02 13:30:00
3     404       2015-10-03 13:30:00

我想使用这些数据在我的网站上显示一个表格,显示每个状态被记录的次数以及状态持续时间到当前时间的百分比。

我已经成功地使用以下查询获得了每个状态的总数....

SELECT 
   `status`, 
   COUNT(*) AS `status_count` 
FROM `table_name` 
GROUP BY `status` 
ORDER BY `status`

...当执行时给我这样的东西...

status    status_count
----------------------
200       1
404       2

我想修改我的 sql 添加持续时间到我的日期列计算的结果,我的目标是结束这个......

status    status_count    duration (%)
-----------------------------------
200       1              20
404       2              80

最佳答案

这里是 SQL FIDDLE DEMO

SELECT t1.status
      ,COUNT(t1.id) as status_count
      ,SUM(IF(t2.date IS NULL, NOW(), t2.date)-t1.date) / (NOW()-t3.start_date) as duration
  FROM table_name t1
       LEFT JOIN table_name t2 ON t1.id = (t2.id - 1)
      ,(SELECT MIN(date) as start_date FROM table_name) t3
GROUP BY t1.status

关于mysql - 计算持续时间百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31529384/

相关文章:

php - SQL 查询,比较表、字符串和整数之间的数据

mysql 不返回正确的 json

php - 最后按 NULL 值排序

mysql - 在执行 SQL 查询时需要帮助

php - 如何在 codeigniter 中使用 ajax 将数据插入 mysql 数据库?

java - JDBC 连接类型

Mysql2::错误:土耳其字符的字符串值不正确

php - PHPUnit 测试中的 Mysql SAVEPOINT

php - 向数组中的图像添加时间戳

sql - PostgreSQL:如果不存在则创建表 AS