Return 仅特定文档 ID 的最新邮寄日期

Return ONLY Most Recent Mail Date for Specific Document IDs

我试图让 Order By 子句用于查询,但它似乎无法正常运行。我的目标如下

  1. 搜索特定用户 ID
  2. 仅搜索两个不同文档 ID(55 和 57)的最新邮件日期
  3. 按邮件日期对搜索结果进行排序,以便最新的邮件日期显示在列表顶部
  4. 只有 return 第一行,它应该是列出的任一文档 ID 的最新邮寄信件

我 运行 遇到的问题是 ORDER BY 子句似乎不起作用。我正在测试它的用户有一个 doc_def_id 为“55”和 mailed_date 为 06/22/2018 的文档,以及一个 doc_def_id 为“57”和2018 年 7 月 8 日的 mailed_date。据我所知,它应该给我“57”的 doc_def_id 因为它有一个更新的邮件日期,但它似乎忽略了 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;

更新的 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

外部查询中应使用 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;