如何根据创建日期限制我的select语句只返回一行?

时间:2017-07-10 10:39:08

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

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

1 个答案:

答案 0 :(得分: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 < 2条件可确保仅包含最新评分。