У меня есть таблица MySQL с кучей назначений для группы пользователей. Но я обнаружил конкретного пользователя, чьи встречи для 2018-09-26
и 2018-09-29
вообще пропущены, и я не знаю почему.
Это код:
SELECT
*
FROM
appointments
WHERE
appday >= '2018-09-26 00:00:00'
AND
(
user1 = 'User name'
OR
user2 = 'User name'
OR
user3 = 'User name'
)
GROUP BY
DAY(appday)
ORDER BY
appday ASC
appday
- это поле datetime
. Самое забавное, что он работает каждый день и каждый другой пользователь, за исключением тех, которые упомянуты. И эта проблема возникает только с одним конкретным пользователем.
Если я удалю предложение Group By, встречи для указанных дней появятся, пока я не добавлю Group By, что они вообще не возвращаются.
EDIT: это результат, который он генерирует:
Спасибо всем за ваш вклад. Я попытался подойти к этой проблеме по-другому, и поэтому сделал это. Вместо того, чтобы запрашивать внутри Group By, я решил просто сделать один запрос, и во время проверки итерации, если текущий ДЕНЬ был таким же, как и предыдущий, если это так, заголовок не был добавлен.
Для поиска списка назначений вам не нужна группа, group by
обычно применимая для агрегатной функции или если вы хотите, чтобы какие-либо группы отчетливо, я просто удаляю группу из вашего запроса
SELECT
*
FROM
appointments
WHERE
appday >= '2018-09-26 00:00:00'
AND
(
user1 = 'User name'
OR
user2 = 'User name'
OR
user3 = 'User name'
)
ORDER BY
appday
У меня нет полной информации о вашем наборе данных и всех результатах, но я чувствую, что вам, возможно, понадобилась функция dayofyear, поскольку вы извлекаете дни более двух месяцев, а не день, который является синонимом dayofmonth. Смысл использования дня в том, что вы можете иметь только уникальные числа в диапазоне от 1 до 31, которые являются потенциальными днями месяца.
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_day
SELECT *
сGROUP BY
обычно недопустим, по крайней мере, с логической точки зрения. Пожалуйста, включите некоторые примеры данных, которые объясняют, что вы пытаетесь сделать здесь.GROUP BY
в первую очередь? Вы не вычисляете какие-либо агрегаты в своем запросе.