[SQL] Правильный запрос в SQL

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
673
Реакции
242
Помог
11 раз(а)
Добрый день!
Имеется плагин который подсчитывает ежедневный скилл игрока (KILL, KDA и тд)
Структура БД следующее:
1608618299527.png
Данные БД следующие:
1608618634931.png
SQL:
CREATE TABLE `dayskillbets` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `AuthID` VARCHAR(32) NULL DEFAULT '',
    `Name` VARCHAR(32) NOT NULL DEFAULT '',
    `CurrentDay` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `Kills` INT(11) NOT NULL,
    `Deads` INT(11) NOT NULL,
    `UserKillStreak` INT(11) NOT NULL,
    `OldKillStreak` INT(11) NOT NULL,
    `OnlineStatus` INT(11) NOT NULL,
    `HeadShot` INT(11) NOT NULL,
    `Damage` INT(11) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=59

Прошу вашей помощи правильно запроса в бд чтобы вернуть лучшего игрока за предыдущий день
т.е. в вкратце открывается МОТД окно и игроку показывается все 7 дней лучший игроков который были зафиксированы
 

Download all Attachments

Сообщения
673
Реакции
242
Помог
11 раз(а)
Попробовал сделать следующие:
SQL:
SELECT * FROM `dayskillbets` ORDER BY `CurrentDay` DESC, `Kills` DESC LIMIT 1000;
Результат:
1608621015433.png

но тут замечается несколько игроков в одном дне

встает вопрос; каким запросом ограничить 1 день = 1 игрок (Best For Kill)
 
Последнее редактирование:
Сообщения
17
Реакции
18
Помог
2 раз(а)
Может быть так

Код:
select * from dayskillbets where date(CurrentDay) = curdate() - INTERVAL 1 DAY order by Kills desc limit 1
 
Сообщения
673
Реакции
242
Помог
11 раз(а)
eagle152, вернет только одну строку (LIMIT 1)


возможно ли можно использовать совметсно с post-96694?
 
Последнее редактирование:
Сообщения
264
Реакции
132
Помог
13 раз(а)
Если у тебя sql поддерживает row_number() то загугли ее использование и поймешь как несложно написать запрос.
У меня на бд не поддерживается вот такое можешь попробовать :

SQL:
SELECT *
FROM
    (SELECT date(CurrentDay) AS date,MAX(kills) AS kills from dayskillbets
        GROUP BY date(CurrentDay) DESC LIMIT 7) AS stats1
    LEFT JOIN dayskillbets AS stats2
        ON stats1.date=date(stats2.CurrentDay) AND stats1.kills=stats2.kills
ORDER by date(stats2.CurrentDay) DESC
Но тут тоже если в один день несколько людей настреляют максимальное кво киллов то будет несколько в выборке (
 
Сообщения
264
Реакции
132
Помог
13 раз(а)
Limbooc, вот последний вариант - пробуй :

SQL:
 SELECT *
 FROM(
   SELECT T.*,
     IF(@last_group_id = date(CurrentDay), @I:=@I+1, @I:=1) RowNum,
     @last_group_id := date(CurrentDay)
   FROM dayskillbets T,(SELECT @last_group_id:=NULL, @I:=0)I
   ORDER BY date(CurrentDay) Desc, kills Desc
 )T
 WHERE RowNum=1
 ORDER BY date(CurrentDay) Desc
 LIMIT 7
 
Сообщения
673
Реакции
242
Помог
11 раз(а)
murlemur, Благодарю, все работает на ура!!
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу