Один общий подход для получения общего количества монстров, убитых каждым пользователем в последние 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)
Я надеюсь, что это руководство поможет вам и прояснит ваши перспективы.