【问题标题】:How Order by is not working with partion by?Order by 如何不与 partition by 一起使用?
【发布时间】:2019-11-11 12:02:44
【问题描述】:
select a.* 
from (
  select lname,
         lstatus,
         ltime,
         lid,
         row_number() over(partition by ltime,lstatus,lid order by ltime desc) as rm 
  from sortdata
) 
a where a.rm=1;

上面查询的结果是:

jo  doc 10/10/2019  211 1
jo  doc 11/10/2019  211 1
jo  roc 12/10/2019  211 1
jo  woc 13/10/2019  211 1

虽然 ltime 的数据类型是 dat ,请提出建议。

【问题讨论】:

  • 请说明您想要什么结果。
  • 问题不清楚。你能分享一个你期望的示例输入和输出吗?
  • 您想要每个日期、状态和 ID 一行吗?如果是这样,分区中的trunc(ltime) 应该会给你你想要的。

标签: sql oracle window-functions


【解决方案1】:

修复partition by。如果你想要每个lid 一行:

select a.*
from (select lname, lstatus, ltime, lid,
             row_number() over( partition by lid order by ltime desc) as rn
      from sortdata
     ) a
where a.rn = 1;

通过包含ltime,您将分区大小限制为一行。因此,分区中所有行的row_number() 值为1(只有其中之一)。

【讨论】:

    猜你喜欢
    • 2020-06-22
    • 2013-10-11
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 2019-03-21
    相关资源
    最近更新 更多