Порядок не сортировка, как ожидалось - PullRequest
0 голосов
/ 15 января 2019

Я использую следующий запрос:

SELECT plan.datum, plan.anketa, plan.ai as autoinc, plan.objekt as sifra , objekt.sifra, objekt.temp4_da FROM plan 
LEFT JOIN objekt ON plan.objekt = objekt.sifra WHERE objekt.temp4_da = '1'
 AND objekt.sifra >= 30 AND plan.datum > '2019-01-15' and plan.datum < '2019-01-30'
 GROUP BY objekt.sifra
 ORDER BY plan.datum ASC, plan.objekt ASC

Я получаю результаты, отсортированные по последним записям, хотя я поставил их по дате. enter image description here

Результаты должны быть от 2019-01-15, но, как вы можете видеть, они отсортированы по дате plan.datum < '2019-01-30' ...

Как мне этого достичь?

EDIT: Когда я выбираю с 2019-01-15 по 2019-01-20, я достигаю этого: enter image description here

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Ваш результат зависит от способности MySQL обрабатывать некорректные запросы SQL с GROUP BY. Например, большая часть СУБД не способна обрабатывать подобные запросы

SELECT col1, col2
FROM tab
GROUP BY col1

Некоторые СУБД обрабатывают этот запрос, если col1 является первичным ключом tab, однако MySQL обрабатывает его всегда и возвращает значение RANDOM col2, если существует более одного col2 значения, соответствующего col1! Например, имея таблицу

col1 | col2
-----------
a    | 1
a    | 2

тогда MySQL может вернуть (a, 1) результат в понедельник и (a, 2) во вторник, используя мой SQL-запрос, показанный выше (я немного саркастичен).

Полагаю, это тоже ваше дело. MySQL выбирает случайное значение plan.datum для каждого objekt.sifra (группа по атрибуту в вашем запросе), и вы впоследствии пропускаете некоторые значения plan.datum в результате. Исправьте запрос, чтобы получить детерминированные значения, и вы избавитесь от своих проблем.

0 голосов
/ 15 января 2019

Учитывая, что он, похоже, отсортировал, как вы хотели, первые 4 строки показывают, что все эти даты находятся в указанном диапазоне.

Вам нужно просто пройти базовый диагноз: Таблица «план» на самом деле содержит данные с этими датами? Если это так, то данные удаляются по вашему запросу.

Таким образом, следующая самая простая проверка - WHERE, поэтому удалите другие пункты (т.е. оставьте ограничения 'datum'), эти данные теперь появляются? Если этого не произойдет, тогда проблема LEFT JOIN, поскольку объединения также являются фильтрами.

Если вы сделаете это, и данные появятся, тогда данные и ваше понимание данных не совпадут, и вам необходимо проверить / подтвердить любые предположения относительно данных, которые вы, возможно, сделали.

Я не на 100% знаком с mysql, но GROUP BY выглядит действительно странно, вы не выполняете никаких сумм, минут или операций в группе. Вам нужна эта линия?

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