ORACLE 中的 SQL 查询 - 选择最近的日期
Posted
技术标签:
【中文标题】ORACLE 中的 SQL 查询 - 选择最近的日期【英文标题】:SQL query in ORACLE - select most recent date 【发布时间】:2014-03-31 20:10:02 【问题描述】:我是 SQL 查询领域的新手。 我需要消除重复的 Staff # 并仅检索突出显示的行。 非常感谢任何帮助。
Staff# Pay_DT Due_DT loan_flag housing
------------------------------------------------------------------------
123-45-6789 14-Feb-14 3-Jan-14 Y null
123-45-6789 14-Feb-14 3-Jan-14 Y Annual
123-45-6789 14-Feb-14 13-Jan-14 Y null
**123-45-6789 14-Feb-14 13-Jan-14 Y Annual**
123-45-6789 null null Y null
123-45-6789 null null Y Annual
【问题讨论】:
为什么是那一行?您的主题谈论“最近的日期”。你不说那是哪个日期。有 4 行具有相同的最大值pay_dt
。有两行具有相同的最大值 pay_dt
和 due_dt
。你为什么选择一个而不是另一个?
您只想返回那一行?
这是历史数据。我需要知道将住房设置为年度并付款的 Pay DT。感谢您的及时回复。
@咖啡 - 是的。该行是期望的结果。
嘿,旁注。您似乎在数据库中使用 SSN 作为标识符。我建议你尽快改变它,如果你失去它们,这是一笔大而昂贵的交易。而且它的效率较低,因为您需要使用字符串而不是数字作为标识符。通常不是最好的主意。
【参考方案1】:
也许你想要
SELECT *
FROM (SELECT a.*,
rank() over (partition by staff# order by pay_dt desc) rnk
FROM table_name a
WHERE housing = 'Annual')
WHERE rnk = 1
交替
SELECT *
FROM (SELECT a.*,
max(pay_dt) over (partition by staff#) max_pay_dt
FROM table_name a
WHERE housing = 'Annual')
WHERE pay_dt = max_pay_dt
如果您可以有关联(两行具有相同的 pay_dt
,其中 housing
列的值 Annual
对应特定的 Staff#
值,则这两个查询都将返回具有该条件的所有行. 如果你想任意打破平局,你可以使用row_number
而不是rank
。否则,你需要告诉我们你想用什么逻辑来打破平局。
【讨论】:
以上是关于ORACLE 中的 SQL 查询 - 选择最近的日期的主要内容,如果未能解决你的问题,请参考以下文章