Order by 如何不与 partition by 一起使用?
Posted
技术标签:
【中文标题】Order by 如何不与 partition by 一起使用?【英文标题】:How Order by is not working with partion 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)
应该会给你你想要的。
【参考方案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
(只有其中之一)。
【讨论】:
以上是关于Order by 如何不与 partition by 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Snowflake sql 中使用 partition by 和 order by 计算不同的值?
row_number() over(partition by a order by b desc) rn 用法
如何在 over 函数中使用 partition by 和 order by?
select over partition by ... order by .. used long time
如何应用:大查询中的count(distinct ...)超过(partition by ... order by)?
如何与“row_number() over (partition by [Col] order by [Col])”相反