MySQL GROUP BY функция странно пропускает несколько дней

0

У меня есть таблица 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: это результат, который он генерирует: Изображение 174551

  • 3
    SELECT * с GROUP BY обычно недопустим, по крайней мере, с логической точки зрения. Пожалуйста, включите некоторые примеры данных, которые объясняют, что вы пытаетесь сделать здесь.
  • 1
    Кроме того, что побудило вас использовать GROUP BY в первую очередь? Вы не вычисляете какие-либо агрегаты в своем запросе.
Показать ещё 4 комментария
Теги:
group-by

3 ответа

0
Лучший ответ

Спасибо всем за ваш вклад. Я попытался подойти к этой проблеме по-другому, и поэтому сделал это. Вместо того, чтобы запрашивать внутри Group By, я решил просто сделать один запрос, и во время проверки итерации, если текущий ДЕНЬ был таким же, как и предыдущий, если это так, заголовок не был добавлен.

  • 0
    Да. Решить проблемы отображения данных в коде приложения
2

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

У меня нет полной информации о вашем наборе данных и всех результатах, но я чувствую, что вам, возможно, понадобилась функция dayofyear, поскольку вы извлекаете дни более двух месяцев, а не день, который является синонимом dayofmonth. Смысл использования дня в том, что вы можете иметь только уникальные числа в диапазоне от 1 до 31, которые являются потенциальными днями месяца.

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_day

Ещё вопросы

Сообщество Overcoder
Наверх
Меню