Добавление условия WHERE прерывает сортировку SQL ORDER BY

79
7

У меня есть табличное определение, подобное следующему

MY_TABLE
==========================
PERSON_ID VARCHAR2(9 BYTE)
ACTN_CD VARCHAR2(8 BYTE)
LOG_DATE CHAR(10 BYTE)
...

Запуск SQL:

SELECT * 
FROM MY_TABLE
WHERE PERSON_ID = '281385010'
ORDER BY TO_DATE(LOG_DATE, 'MM/DD/YYYY') DESC, ACTN_CD;

возвращает результаты ниже.

PERSON_ID ACTN_CD  LOG_DATE
--------- -------- ----------
281385010 COR-ML 06/28/2016
281385010 COR-ML 06/09/2016
281385010 AUD-01 06/08/2016
281385010 COR-PH 05/26/2016
281385010 AUD-01 05/24/2016
281385010 AUD-01 05/16/2016
281385010 TERM 05/03/2016

Однако, если я укажу ACTN_CD для соответствия в моем заявлении:

SELECT * 
FROM MY_TABLE
WHERE PERSON_ID = '281385010'
AND ACTN_CD = 'AUD-01'
ORDER BY TO_DATE(LOG_DATE, 'MM/DD/YYYY') DESC, ACTN_CD;

Мое предложение ORDER BY, похоже, проигнорировано и результаты;

PERSON_ID ACTN_CD  LOG_DATE
--------- -------- ----------
281385010 AUD-01 05/16/2016
281385010 AUD-01 05/24/2016
281385010 AUD-01 06/08/2016

Я в тупике, почему добавление критериев ACTN_CD нарушит порядок сортировки. Кто-нибудь еще видел поведение, подобное этому?

РЕДАКТИРОВАТЬ
Если быть точным, я ищу результаты, которые будут отсортированы сначала с помощью LOG_DATE DESCending, затем ACTN_CD ASCending, если на одну дату выполняется несколько действий. Это работает отлично, пока ACTN_CD не указан в предложении WHERE. Я могу буквально указать любое другое поле в таблице в ГДЕ и не будет нарушать эту сортировку.

ПРОБЛЕМА РЕШЕНА
Я создал другую таблицу с теми же полями, что и оригинал, и скопировал некоторые данные. Запуск того же SQL против этой новой таблицы дал ожидаемые результаты, поэтому я начал искать различия. Оказывается, ACTN_CD был частью индекса на столе. Удаление индекса фиксировало проблему сортировки. Я не знал, что сортировка в индексированном поле вызовет проблемы, надеюсь, это поможет кому-то еще в будущем. Спасибо всем.

спросил(а) 2017-03-29T19:40:00+03:00 4 года, 5 месяцев назад
1
Решение
111

Я создал другую таблицу с теми же полями, что и оригинал, и скопировал некоторые данные. Запуск того же SQL против этой новой таблицы дал ожидаемые результаты, поэтому я начал искать различия. Оказывается, ACTN_CD был частью индекса на столе. Удаление индекса фиксировало проблему сортировки. Я не знал, что сортировка в индексированном поле вызовет проблемы, надеюсь, это поможет кому-то еще в будущем. Спасибо всем.

ответил(а) 2017-03-31T23:03:00+03:00 4 года, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема