Как получить общее количество пользователей, среднее время прошло 7 дней - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу получить общее среднее время использования пользователей за день за прошедшие 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();

enter image description here

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

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

    $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."],";
   }
0 голосов
/ 27 февраля 2019

Для этого вам нужно использовать 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();

update

Если вам просто нужно среднесуточное значение для всех пользователей, вы можетеудалить 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...