создать рейтинг и статистику с повторными записями базы данных - PullRequest
0 голосов
/ 23 ноября 2018

Сегодня я хочу получить помощь в создании оценок для пользователя в моей базе данных.У меня есть этот запрос:

SELECT
    r1.id,
    r1.nickname,
    r1.fecha,
    r1.bestia1,
    r1.bestia2,
    r1.bestia3,
    r1.bestia4
    r1.bestia5
FROM
    reporte AS r1
INNER JOIN
    ( SELECT
          nickname, MAX(fecha) AS max_date
      FROM
          reporte
      GROUP BY
          nickname ) AS latests_reports 
ON latests_reports.nickname = r1.nickname
AND latests_reports.max_date = r1.fecha
ORDER BY
    r1.fecha DESC

от друга с этого сайта, который помог мне получить "последнюю запись на пользователя в день", основываясь на этом, я смотрю, как подсчитать результаты вранжируя ежедневно, еженедельно или ежемесячно, чтобы использовать статистические диаграммы или Google DataStudio, я попробовал следующее:

select id, nickname, sum(bestia1), sum(bestia2), etc...

Но это не дает полный результат, который я хочу.Вот почему я ищу помощь.Кроме того, я знаю фильтры datastudio, где я могу показать много графиков, но все равно могу считать полностью.

Например, один игрок за последние 30 дней сообщил о 265 убитых монстрах, но когда я использую в datastudio свой запрос, он учитывается толькопоследнее значение (это может быть 12).поэтому я хочу правильно рассчитывать, чтобы использовать с диаграммами

записей SQL, отфильтрованных по моему запросу:

enter image description here

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Один общий подход для получения общего количества монстров, убитых каждым пользователем в последние X дней , и подсчет очков, подобный тому, который вы предлагаете в комментариях, может выглядеть следующим образом:

SET @daysOnHistory = X; -- Where X should be an integer positive number (like 10).

SELECT
    nickname,
    SUM(bestia1) AS total_bestia1_killed,
    SUM(bestia2) AS total_bestia2_killed,
    SUM(bestia3) AS total_bestia3_killed,
    SUM(bestia4) AS total_bestia4_killed,
    SUM(bestia5) AS total_bestia5_killed,
    SUM(bestia1 + bestia2 + bestia3 + bestia4 + bestia5) AS total_monsters_killed,
    SUM(bestia1 +  2 * bestia2 + 3 * bestia3 + 4 * bestia4 + 5 * bestia5) AS total_score
FROM
    reporte
WHERE
    fecha >= DATE_ADD(DATE(NOW()), INTERVAL -@daysOnHistory DAY)
GROUP BY
    nickname
ORDER BY
    total_score DESC

Теперь, если вам нужен тот же расчет, но только с учетом дней текущей недели (при условии, что неделя начинается в понедельник), вам нужно заменить предыдущее предложение WHERE следующим:

WHERE
    fecha >= DATE_ADD(DATE(NOW()), INTERVAL -WEEKDAY(NOW()) DAY)

Более того, если вы хотите все то же самое, но только с учетом дней текущего месяца , вам нужно заменить предложение WHERE на:

WHERE
    MONTH(fecha) = MONTH(NOW())

Чтобы оценить статистику по дням текущего года , необходимо заменить предложение WHERE на:

WHERE
    YEAR(fecha) = YEAR(NOW())

И, наконец, дляоценку за определенный диапазон дней , который вы можете использовать, например:

WHERE
    DATE(fecha) BETWEEN CAST("2018-10-15" AS DATE) AND CAST('2018-11-10' AS DATE)

Я надеюсь, что это руководство поможет вам и прояснит ваши перспективы.

0 голосов
/ 23 ноября 2018

Это даст вам количество убитых монстров за последние 30 дней на пользователя:

SELECT
    nickname,
    sum(bestia1) as bestia1,
    sum(bestia2) as bestia2,
    sum(bestia3) as bestia3,
    sum(bestia4) as bestia4,
    sum(bestia5) as bestia5
FROM
    reporte 
WHERE   fecha >= DATE_ADD(curdate(), interval -30 day)
GROUP BY nickName
ORDER BY
...