首页 > 解决方案 > 仅返回特定文档 ID 的最近邮寄日期

问题描述

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

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

我遇到的问题是该ORDER BY条款似乎不起作用。我正在测试它的用户有一个带有doc_def_id“55”和mailed_date06/22/2018 的文档,以及一个带有doc_def_id“57”和mailed_date07/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;

标签: sqloracleoracle11gsql-order-by

解决方案


较新的 Oracle 版本支持 ANSI SQLFETCH 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

推荐阅读