Rank 分区中的情况
Posted
技术标签:
【中文标题】Rank 分区中的情况【英文标题】:Case when in Rank partition By 【发布时间】:2019-08-02 20:53:54 【问题描述】:我一直在重新学习 SQL,但我不确定这段代码是否可以完成。有人可以就这个案例提供反馈或替代方案吗?
所以总的来说,我正在调查在同一天、不同时间、同一用户之间提交的订单之间的任何重复。
我正在考虑第二步,我会对它们进行排名,看看是否还有基于时间和日期的另一行,排名第二?
Select * ( including orderDate)
RANK() OVER(PARTITION BY
Customer,
case
when (Orderstart(Datetimestamp) > OrderEnd(Datetimestamp) and OrderEnd<Orderstart ) AS Rank_Items
From FirstStep
这只是对现在上升到 500+ 排名的所有内容进行排名。
样本数据
期望的结果:
【问题讨论】:
用您正在使用的数据库标记您的问题。你如何识别日期和时间?orderend
和 orderstart
是什么?
OrderEnd - 客户订购“完成”订单的日期时间戳”虽然 OrderStart 是客户订购订单的日期时间戳。基本上我试图找到可能发生的任何双重订单在同一天从 13:00 到 15:00 来自一位特定客户。
您需要提供样本数据和想要的结果。你的问题不清楚。
我已经编辑好了
顶这个帖子
【参考方案1】:
我会使用row_number()
来识别同一客户在同一日期的多个订单:
row_number() over (partition by customer, cast(orderdatetime as date) order by orderdatetime)
最新数据可能因数据库而异。
这会枚举给定日期的客户订单,这似乎是您想要完成的。
【讨论】:
感谢您的建议 - 我排名的主要目标是从字面上找到从 14:50 开始订单并在 15:15 结束的“史蒂夫”的重复项。但是史蒂夫,也在 14:55-15:00 之间下了一个有效的订单..以上是关于Rank 分区中的情况的主要内容,如果未能解决你的问题,请参考以下文章
在不使用 ROW_NUMBER() OVER 函数的情况下获取分区内行(排名)的序号
Postgres 窗口函数 - rank() 按 bigint 分区
窗口函数 RANK()、DENSE_RANK() 等的特殊情况