【问题标题】:How can I limit my select statement to return only one row based on creation date?如何限制我的选择语句根据创建日期仅返回一行?
【发布时间】:2017-07-10 10:39:07
【问题描述】:

如何限制我的选择语句只显示一个?

【问题讨论】:

  • 你能提供一些带有rextester链接的测试数据吗?喜欢rextester.com
  • @adamb - 你能简化这个问题吗,因为我(不只是我)在没有一些样本数据的情况下对逻辑和排名系统感到困惑。
  • 好吧,我会努力的
  • 现在好点了吗?
  • 您使用什么版本的 Oracle?

标签: sql oracle greatest-n-per-group


【解决方案1】:

如果您使用的是 Oracle 12c,则可以使用 CROSS APPLY 而不是 INNER JOIN

CROSS APPLY (SELECT inactivationremark,
                    createts
              FROM t_se_internalrating ir
              WHERE ir.RATINGSTATUS = 'Deactivated'
              AND ir.PARTNERID = p1.ID
              ORDER BY ir.createts DESC
              fetch first 1 rows only
             ) ir

寻找 CROSS APPLY 或 OUTER APPLY - 这是您正在寻找的模式。 See here.

如果您使用的是较低版本,则可以使用 ROW_NUMBER 函数:

inner join 
( SELECT 
       inactivationremark,
       createts,  
       row_number() OVER(
       PARTITION BY ir.partnerid ORDER BY ir.createts DESC)  rn
  FROM t_se_internalrating ir
  WHERE ir.ratingstatus = 'Deactivated') 
) ir
 ON ir.partnerid = p1.id AND ir.rn < 2

AND rn &lt; 2 条件确保仅包含最新评级。

【讨论】:

  • 我使用的是 Oracle 11c
  • @adamb 查看修改后的答案。
  • @adamb row_number() 应该被ir.partnerid分区,修改答案
猜你喜欢
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 2021-11-20
相关资源
最近更新 更多