Как получить общее среднее время пользователей за 7 дней

Я хочу получить общее среднее время использования пользователей за день за последние 7 дней. Я написал SQL для среднего времени каждого пользователя, оно идет отлично, но у меня есть проблемы с функцией LARAVEL SQL, пожалуйста, помогите исправить этот SQL.

$currentTime = Carbon::today();

    $userUsage = DB::table('active_user')
                ->select(DB::raw('acu_name as name'),
                    DB::raw('u_fname as fname'),
                    DB::raw('AVG(TIMESTAMPDIFF(MINUTE,acu_at,acu_et)) as averageTime'),
                    DB::raw('count(*) as number'))
                ->join('u_info_one', 'active_user.acu_name', '=', 'u_info_one.u_email')
                ->whereDate('acu_at', '<=', $currentTime)
                ->groupBy('acu_name')
                ->get();

Как получить общее среднее время пользователей за 7 дней

Пожалуйста, используйте только связанные теги в своем вопросе.

Suraj Kumar 27.02.2019 10:41
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Для этого вам нужно использовать GROUP BY, например:

$userUsage = DB::table('active_user')
                ->select(DB::raw('acu_name as name'),
                    DB::raw('u_fname as fname'),
                    DB::raw('AVG(TIMESTAMPDIFF(MINUTE,acu_at,acu_et)) as averageTime'),
                    DB::raw('count(*) as number'))
                ->join('u_info_one', 'active_user.acu_name', '=', 'u_info_one.u_email')
                ->whereDate('acu_at', '<=', $currentTime)
                ->groupBy('acu_name', DB::raw('DATE(acu_at)'))
                ->get();

Обновить

Если вам просто нужно среднее значение за день для всех пользователей, вы можете удалить acu_name из группы, например:

$userUsage = DB::table('active_user')
                ->select(DB::raw('acu_name as name'),
                    DB::raw('u_fname as fname'),
                    DB::raw('AVG(TIMESTAMPDIFF(MINUTE,acu_at,acu_et)) as averageTime'),
                    DB::raw('count(*) as number'))
                ->join('u_info_one', 'active_user.acu_name', '=', 'u_info_one.u_email')
                ->whereDate('acu_at', '<=', $currentTime)
                ->groupBy(DB::raw('DATE(acu_at)'))
                ->get();

это среднее значение для каждого пользователя или среднее общее количество пользователей?

Jerad 27.02.2019 10:33

Я хочу, чтобы результат выглядел так: totaverage = (acu_at - acu_et)/всего пользователей

Jerad 27.02.2019 10:35

Да, это даст вам среднее значение за каждый acu_name в день.

Darshan Mehta 27.02.2019 10:44

мне нужно среднее количество пользователей в день

Jerad 27.02.2019 10:44

прикрепил результат

Jerad 27.02.2019 11:50

<?php foreach($userUsage as $usUa) { $aveTime = (($usUa->number)/($usUa->averageTime)); echo "['".$usUa->date."',".$aveTime."],"; } ?> этот метод правильный или нет за день общее время разделить на общее количество пользователей

Jerad 27.02.2019 12:34

Правильный ответ

    $userUsage = DB::table('active_user')
                ->select(DB::raw('DATE(acu_at) as date'),
                    DB::raw('AVG(TIMESTAMPDIFF(MINUTE,acu_at,acu_et)) as averageTime'),
                    DB::raw('COUNT(DISTINCT `acu_name`) as users'))
                ->join('u_info_one', 'active_user.acu_name', '=', 'u_info_one.u_email')
                ->whereDate('acu_at', '<=', $currentTime)
                ->groupBy(DB::raw('DATE(acu_at)'))
                ->orderBy(DB::raw('DATE(acu_at)'))
                ->get();

foreach($userUsage as $usUa)
   {
     $avegTime = ($usUa->averageTime/$usUa->users);
     echo "['".$usUa->date."',".$avegTime."],";
   }

Другие вопросы по теме