Return 仅特定文档 ID 的最新邮寄日期
Return ONLY Most Recent Mail Date for Specific Document IDs
我试图让 Order By 子句用于查询,但它似乎无法正常运行。我的目标如下
- 搜索特定用户 ID
- 仅搜索两个不同文档 ID(55 和 57)的最新邮件日期
- 按邮件日期对搜索结果进行排序,以便最新的邮件日期显示在列表顶部
- 只有 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;
我试图让 Order By 子句用于查询,但它似乎无法正常运行。我的目标如下
- 搜索特定用户 ID
- 仅搜索两个不同文档 ID(55 和 57)的最新邮件日期
- 按邮件日期对搜索结果进行排序,以便最新的邮件日期显示在列表顶部
- 只有 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;