#sql #oracle #date
#sql #Oracle #Дата
Вопрос:
Я не знаю, возможно ли это вообще, но я хочу упорядочить результаты моего запроса по времени, прошедшему между двумя датами, одна из которых исходит из запроса.
Я хочу упорядочить альбомы с ДИСКОВ так, чтобы те, у которых REL_DATE ближе к другой дате (заданной вторым запросом), появлялись первыми. Запрос «SELECT ORDER_S …» возвращает единственную дату, извлеченную из другой таблицы, и отлично работает сам по себе.
SELECT ALBUM
FROM DISCS
ORDER BY
ABS((
SELECT ORDER_S
FROM SALE_LINE
WHERE E_MAIL = (
SELECT E_MAIL FROM CLIENTS
WHERE DNI = 46470063
) AND ROWNUM = 1
ORDER BY ORDER_S DESC)
- REL_DATE) ASC;
Где ALBUM — атрибут строкового типа, а ORDER_S и REL_DATE — атрибуты типа ДАТЫ.
Однако все, что я получаю, это ошибка в ORDER BY ORDER_S DESC)
строке «отсутствует правая скобка», и я не могу понять, почему.
Комментарии:
1. Пожалуйста, предоставьте образцы данных и желаемые результаты. Вы также должны описать, что вы хотите, чтобы запрос выполнял. Также укажите имена столбцов, чтобы было видно, из каких таблиц они исходят.
2. Спасибо за совет @GordonLinoff, я попытался добавить больше деталей, чтобы лучше объяснить ситуацию.
Ответ №1:
Правильный синтаксис будет:
SELECT d.ALBUM
FROM DISCS d
ORDER BY
ABS((SELECT MIN(sl.ORDER_S)
FROM SALE_LINE sl
WHERE sl.E_MAIL = (SELECT c.E_MAIL
FROM CLIENTS c
WHERE c.DNI = 46470063
)
) - d.REL_DATE
) ASC;
Я не могу сказать, делает ли это что-нибудь полезное.
Комментарии:
1. Спасибо, это решило проблему. Я полагаю, это было из-за
ROWNUM
странного поведения при интеграции внутри другого запроса.2. Вычисляется
rownum
передorder by
, поэтому ваш код не сделал то, что вы ожидали.