【问题标题】:Select the greater date if the secondary key is same in SQL (Oracle)如果 SQL (Oracle) 中的辅助键相同,则选择较大的日期
【发布时间】:2022-07-29 08:35:22
【问题描述】:

我有下表(表 1 和表 2)。如果与某个姓氏匹配,我想选择 ID、Offer ID 和 Date。我只想要 2 条最新记录。以下是我的查询。这很好用,但我只想在 OfferID 相同时返回最大日期或行。例如,下面的查询给了我这个输出 Current Output 其中 OfferID 是重复的。我只想要一个最近更新/创建的 OfferID。所以我想要的输出是Expected Output。如果有人能指导我如何更新我的查询,我将不胜感激。

SELECT Table1.DATE,
       Table1.OfferID,
       Table2.ID
FROM TABLE1
JOIN TABL2 ON TABLE1.ID = TABLE2.ID
WHERE TABLE2.LASTNAME = "DOE"
ORDER BY Table1.DATE DESC
OFFSET 0 ROW FETCH FIRST 2 ROW ONLY;

Table1

Table2

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    执行此操作的简单方法是使用分析函数 (rank/row_number())。

    如果我的问题是正确的,您是否希望通过忽略它们之间的关系来获得前 2 条记录?

    SELECT Y.* FROM (
    SELECT X.*,ROW_NUMBER() OVER(PARTITION BY RNK ORDER BY TABLE1.DATE DESC) as rnk2 FROM (
        SELECT Table1.DATE,
               Table1.OfferID,
               Table2.ID,
               DENSE_RANK() OVER(ORDER BY Table1.DATE DESC) as rnk
        FROM TABLE1
        JOIN TABL2 ON TABLE1.ID = TABLE2.ID
        WHERE TABLE2.LASTNAME = "DOE"
                   )X
    WHERE X.RNK<=2
      )Y
    WHERE Y.RNK2=1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 2016-05-28
      • 1970-01-01
      相关资源
      最近更新 更多