Сортировка данных через некоторое время - PullRequest
0 голосов
/ 03 мая 2019

как мне следующий запрос, чтобы изменить мои данные, отсортированные за меньшее время, (наоборот, в этом примере).

Это похоже на текущий результат

Это мой запрос:

SELECT *
FROM Z_PRAESENZZEIT
WHERE ZPZ_Datum = N'2019-02-11T00:00:00.000' and ZPZ_LPE_ID = 121
order by ZPZ_ID  ASC

Мне нужно отсортировать по ZPZ_ID и ZPZ_VON, что меньше (ZPZ_Von: 1899-12-30 10:00:00 <1899-12-30 13: 00: 00 </p>

Ответы [ 3 ]

1 голос
/ 03 мая 2019

Я думаю, что вы не хотите сортировать за меньшее время, т. Е. Более эффективно, но по временам, которые меньше заданного значения.

SELECT *
FROM Z_PRAESENZZEIT
WHERE
    ZPZ_Datum = N'2019-02-11T00:00:00.000' and
    ZPZ_LPE_ID = 121
ORDER BY
    CASE WHEN ZPZ_Von < N'1899-12-30 13:00:00' THEN 0 ELSE 1 END,
    ZPZ_ID

Сначала будут перечислены все записи с ZPZ_Von меньше 1899-12-30 13:00:00 на ZPZ_ID, затем все остальные на ZPZ_ID.Это CASE выражение создает две группы, по которым сортируются записи.


Если вы просто хотите отсортировать сначала по времени, а затем по идентификатору (если две или более записи имеют одинаковое время)затем напишите

ORDER BY ZPZ_Von, ZPZ_ID

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

1 голос
/ 03 мая 2019

Есть несколько очень простых способов оптимизации запросов к данным, но те, которые будут вам полезны, используют ZPZ_LPE_ID в качестве идентификатора, имеет смысл иметь индекс для этого столбца (и обязательно перестроить индекстак что это на самом деле улучшает скорость).

ZPZ_Datum = N'2019-02-11T00:00:00.000'

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

0 голосов
/ 03 мая 2019

Я бы написал ваш запрос как:

SELECT *
FROM Z_PRAESENZZEIT
WHERE ZPZ_Datum = '2019-02-11' and ZPZ_LPE_ID = 121
ORDER BY ZPZ_ID  ASC;

Для этого запроса вы хотите индекс на Z_PRAESENZZEIT(ZPZ_LPE_ID, ZPZ_Datum, ZPZ_ID).Это должно удовлетворять как WHERE, так и ORDER BY, чтобы избежать сортировки.

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