Почему я получаю результаты из другой строки в MySQL? - PullRequest
0 голосов
/ 03 апреля 2020

Используя этот запрос,

SELECT username, MAX(wordpermin) as maxword,date_created FROM user_records where DATE(date_created) = CURDATE() GROUP BY(username) ORDER BY maxword DESC LIMIT 20

Я пытаюсь запросить ограничение в 20 верхних wordpermin по их имени пользователя и созданному времени, а также по телефону date_created в течение текущих 24 часов. .

У меня проблема, когда у меня новый максимум wordpermin. Вместо того, чтобы дать мне также новый date_created, он сохраняет старое значение date_created. Я даже заглянул в свою базу данных и убедился, что обновил date_created. Как это может произойти?

Я имею в виду, у меня есть два значения из разных строк.

1 Ответ

2 голосов
/ 03 апреля 2020

В следующем запросе указывается последняя дата, когда у пользователя есть максимальное слово.

Ваш запрос не будет запущен, когда вы активировали ONLY_FULL_GROUP_BY.

Вы всегда должны указывать для каждые столбец, который агрегирующую функцию вы хотите использовать, потому что SQL строки не имеют никакого порядка, и каждый столбец будет выбран сам по себе.

Я выбрал Max (date_created) , так что MySQL знает, какую дату показывать, потому что если бы было более одной даты с тем же максимальным словом, MySQL показало бы все.

SELECT
    u.username, u1.maxword, MAX(u.date_created)
FROM
    user_records u
        INNER JOIN
    (SELECT
        username,DATE(date_created) date_created, MAX(wordpermin) AS maxword
    FROM
        user_records
    GROUP BY username,DATE(date_created)) u1 ON u.username = u1.username
        AND u.wordpermin = u1.maxword AND Date(u.date_created) = DATE(u1.date_created)
WHERE
    DATE(u.date_created) = CURDATE()
GROUP BY (username)
ORDER BY maxword DESC
LIMIT 20;
LIMIT 20

Examole http://sqlfiddle.com/#! 9/857355/2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...