Нахождение среднего числа ежедневных сеансов со статической максимальной датой и минимальной датой

PHP 5.X, MySQL 5.7.15

Получил данные, сгруппированные по дням недели, чтобы обеспечить среднее количество сеансов при ежедневном использовании с использованием максимальной даты и минимальной даты. Максимальная и минимальная дата применяются к Дню недели в этом сценарии, что приводит к тому, что количество недель будет различным для каждого случая.

Запрос, который построил эти результаты, определяется как Запрос 1 ниже. По сути, информация в последних 4 столбцах должна быть статичной, я сделал это, используя SELF JOIN, что подробно описано ниже. В этом примере session_count взорвался, так как я работаю только в среде разработчиков.

Так что пошло не так и почему?

  session_count | weekday | maxDate             |minDate              | numOfDayDiff| numOfWeeks
'29'            | 'Friday'|'2017-03-10 12:16:47'|'2016-08-12 12:31:28'| '210'       | '30'
'26'            |'Monday' |'2017-03-06 17:10:59'|'2016-08-08 14:31:16'| '210'       | '30'
'6'            |'Saturday'|'2017-03-04 23:26:12'|'2016-08-20 23:10:47'| '196'       | '28'
'10'            |'Sunday' |'2017-03-12 18:28:51'|'2016-08-14 16:26:30'| '210'       | '30'
'22'           |'Thursday'|'2017-03-09 15:45:27'|'2016-06-30 12:42:19'| '252'       | '36'
'22'            |'Tuesday'|'2017-03-21 15:00:08'|'2016-06-28 19:51:21'| '266'       | '38'
'22'          |'Wednesday'|'2017-03-01 23:57:34'|'2016-07-06 16:17:39'| '238'       | '34'

Я хочу, чтобы максимальная дата и минимальная дата были статичными. Я пытался использовать объяснение w3schools Синтаксис самостоятельного соединения

SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;

Я пытался применить этот запрос, maxDate, minDate, numDaysDiff и numOfWeeks соответствовали значениям для наибольшего числа недель выше, но статистика для session_count взорвалось.

Вот Запрос 1 который получил таблицу выше:

SELECT
CEIL(COUNT(ss.session_id) / (FLOOR (DATEDIFF(MAX(ss.date),MIN(ss.date))/7))) as session_count,
DAYNAME((ss.date)) as weekday,
MAX(ss.date) as maxDate,
MIN(ss.date) as minDate,
DATEDIFF(MAX(ss.date),MIN(ss.date)) as numOfDayDiff,
FLOOR(DATEDIFF(MAX(ss.date),MIN(ss.date))/7) as numOfWeeks
FROM  session ss
JOIN user u ON ss.user = u.id
JOIN account a on u.account = a.id
WHERE a.isTest=false
GROUP BY weekday
ORDER BY weekday;

Вот Q-2 изменено с помощью SELF JOIN синтаксис с последующей выходной таблицей:

SELECT
CEIL(COUNT(ss.session_id) / (FLOOR (DATEDIFF(MAX(xx.date),MIN(xx.date))/7))) as session_count,
DAYNAME((ss.date)) as weekday,
MAX(xx.date) as maxDate,
MIN(xx.date) as minDate,
DATEDIFF(MAX(xx.date),MIN(xx.date)) as numOfDayDiff,
FLOOR(DATEDIFF(MAX(xx.date),MIN(xx.date))/7) as numOfWeeks
FROM  session xx, session ss
JOIN user u ON ss.user = u.id
JOIN account a on u.account = a.id
WHERE a.isTest=false
GROUP BY weekday
ORDER BY weekday;

Результаты:

session_count | weekday | maxDate             |minDate              | numOfDayDiff| numOfWeeks
99357         |Friday   |2017-03-21 15:00:08  |2016-06-28 19:51:21  |266          |38
88062         |Monday   |2017-03-21 15:00:08  |2016-06-28 19:51:21  |266          |38
16829         |Saturday |2017-03-21 15:00:08  |2016-06-28 19:51:21  |266          |38
32505         |Sunday   |2017-03-21 15:00:08  |2016-06-28 19:51:21  |266          |38
90136         |Thursday |2017-03-21 15:00:08  |2016-06-28 19:51:21  |266          |38
94516         |Tuesday  |2017-03-21 15:00:08  |2016-06-28 19:51:21  |266          |38
83451         |Wednesday|2017-03-21 15:00:08  |2016-06-28 19:51:21  |266          |38

Может кто-нибудь посоветовать, пожалуйста, как я допустил ошибку? Я собираюсь посмотреть, смогу ли я создать скрипку mysql, чтобы прикрепить ее в качестве примера.

0

Решение

Чтобы сохранить стресс от базы данных, я решил использовать модифицированную версию Запрос 1 и использовать результаты, чтобы определить, какое из них имеет наибольшее количество недель, и разделить счет на количество недель в php.

Вот модифицированный Запрос 1

SELECT
COUNT(ss.session_id) as session_count,
DAYNAME((ss.date)) as weekday,
MAX(ss.date) as maxDate,
MIN(ss.date) as minDate,
CEIL(DATEDIFF(MAX(ss.date),MIN(ss.date))/7) as numOfWeeks
FROM  session ss
JOIN user u ON ss.user = u.id
JOIN account a on u.account = a.id
WHERE a.isTest=false
GROUP BY weekday
ORDER BY weekday;

session_count | weekday | maxDate            | minDate           | numOfWeeks
2017          | Friday  |2017-03-17 23:39:56 |2016-09-09 01:06:36|  27
1908          | Monday  |2017-03-20 23:59:53 |2016-09-12 14:52:29|  27
943           | Saturday|2017-03-18 23:39:14 |2016-09-17 14:49:56|  26
825           | Sunday  |2017-03-19 23:56:37 |2016-09-18 22:28:45|  26
2429          | Thursday|2017-03-16 23:51:23 |2016-09-08 12:02:54|  27
2341          | Tuesday |2017-03-21 23:52:20 |2016-09-06 12:06:39|  28
2569          |Wednesday|2017-03-22 17:03:16 |2016-09-07 02:43:10|  28

Заметка Данные отличаются из-за разных баз данных.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]