Возврат ТОЛЬКО самой последней даты отправки почты для определенных идентификаторов документов - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь заставить предложение Order By работать для запроса, но оно не работает должным образом.Моя цель заключается в следующем

  1. Поиск определенного идентификатора пользователя
  2. Поиск только самой последней даты почты для двух разных идентификаторов документов (55 и 57)
  3. Упорядочите результаты поиска по дате отправки почты, чтобы любая дата отправки почты отображалась в верхней части списка.
  4. возвращает только первую строку, которая должна быть самой последней отправленной по почте буквой для любого из документов.Перечисленные идентификаторы

Проблема, с которой я сталкиваюсь, заключается в том, что предложение ORDER BY не работает.Пользователь, с которым я его тестирую, имеет документ с doc_def_id из «55» и mailed_date от 22.06.2008, а также документ с doc_def_id из «57» и mailed_date из 07/ 08/2018.Насколько мне известно, он должен дать мне doc_def_id из "57", потому что он имеет более позднюю дату отправки почты, но, похоже, игнорирует предложение ORDER BY и дает мне первый результат (как если бы не было предложения ORDER BY) не смотря ни на что.

код:

SELECT
    ual.user_id,
    ual.account_id,
    dr.mailed_date, 
    dr.doc_def_id 
FROM doc_request dr
JOIN user_account_link ual 
    ON dr.account_id = ual.account_id
WHERE 
    ual.user_id = '123456'
    AND dr.mailed_date = (
        SELECT Max(dr.mailed_date)
         FROM doc_request
          WHERE ual.user_id = '123456'
          AND dr.doc_def_id IN ('55','57')
    )
AND ROWNUM <= 1
ORDER BY dr.mailed_date DESC;

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

ROWNUM должен использоваться во внешнем запросе, чтобы получить точную максимальную дату.

select * from
(SELECT ual.user_id, ual.account_id, dr.mailed_date, dr.doc_def_id 
FROM doc_request dr

join user_account_link ual ON dr.account_id = ual.account_id

WHERE ual.user_id = '123456'

AND dr.mailed_date = (SELECT Max(dr.mailed_date)
  FROM doc_request
  WHERE ual.user_id = '123456'
  AND dr.doc_def_id IN ('55','57'))

ORDER BY dr.mailed_date DESC)
WHERE ROWNUM=1;
0 голосов
/ 04 декабря 2018

Более поздние версии Oracle поддерживают предложение ANSI SQL FETCH FIRST:

SELECT ual.user_id, ual.account_id, dr.mailed_date, dr.doc_def_id 
FROM doc_request dr
join user_account_link ual ON dr.account_id = ual.account_id
WHERE ual.user_id = '123456'
  AND dr.doc_def_id IN ('55','57')
ORDER BY dr.mailed_date DESC
FETCH FIRST 1 ROW ONLY
...