我想对我的数据库中的记录进行统计,我想计算用户从某个日期时间和/或某个日期时间以及每个4每天小时数获取日期时间从/到特定小时之间的平均数
简单示例:我想从'2016-09-20 00:00:00'到'2016-09-23 23:59:59'的成功登录平均值,结果应该是('00:00:00' - '11:59:59')和''12:00:00' - '23:59:59'示例数据(其中状态1表示成功,0表示不成功):
| id | | driver_id | login_timedate | status |
| 1 | | 1 | '2016-09-20 00:00:11' | 1 |
| 2 | | 2 | '2016-09-20 01:16:09' | 1 |
| 3 | | 2 | '2016-09-20 23:01:16' | 1 |
| 4 | | 3 | '2016-09-21 04:04:59' | 1 |
| 5 | | 3 | '2016-09-21 05:06:59' | 0 |
| 6 | | 2 | '2016-09-21 16:06:59' | 1 |
| 7 | | 1 | '2016-09-22 00:16:59' | 1 |
| 8 | | 2 | '2016-09-23 04:09:22' | 0 |
| 9 | | 1 | '2016-09-23 06:22:59' | 1 |
| 10 | | 3 | '2016-09-23 22:09:22' | 1 |
| 11 | | 1 | '2016-09-24 00:00:22' | 1 |
因此,在这种情况下,我会得到成功登录的总数从(20-23/09/2016)是:8(DAY1 = 3,DAY2 = 2,第3天 = 1,第四天 = 2)
总数的范围内的每一天从('00成功的:00:00' - '11:59:59')是(DAY1 = 2,DAY2 = 1,第三天 = 1,第四天 = 1)
平均: 5/4 = 1.25
总数成功的的范围内的每一天从('00:00:00' - '11:59:59')是(DAY1 = 1,DAY2 = 0,第3天= 1,第四天= 1)
平均: 3/4 = 0 。75
我已经做了第一部分获得的日期时间范围内成功登录的总数,这是我的代码(这将返回8)
SET @start_date = '2016-09-20';
SET @start_taime = '00:00:00';
SET @end_date = '2016-09-23';
SET @end_time = '23:59:59';
SELECT SUM(`total_logins`.`number_of_success`) FROM (
SELECT COUNT(`login_logs`.`driver_id`) AS `number_of_success`
FROM `login_logs`
WHERE `login_logs`.`status` = 1
AND
`login_logs`.`login_timedate` >= CONCAT(@start_date, ' ', @start_time)
AND
`login_logs`.`login_timedate` <= CONCAT(@end_date, ' ', @end_time)
GROUP BY `login_logs`.`user_id`
) AS `total_logins`
#更新: 此代码的预期输出:
| total_logins |
| 8 |
我想这样做,其计算相同的日期时间范围内的平均登录从XX的下一部分:XX:XX时间YY:YY:YY时间如此:
- 总数成功的的范围内的每一天从('00:00:00' - '11:59:59')是(DAY1 = 2,DAY2 = 1 ,第三天 = 1,第四天 = 1)
- 平均: 5/4 = 1.25
#UPDATE: 预期输出修改我的代码来获得avrage后(00:00:00' - '11:59:59' ):
| Avrage_00_12 |
| 1.25 |
应该如何我修改代码来实现这部分?
我希望你明白我的问题
感谢您的帮助先进
我不完全听从你的问题。请向我们展示您的预期产出。 –
@TimBiegeleisen已更新它的问题与预期的产出 –