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+ 排名的所有内容进行排名。

样本数据

期望的结果:

【问题讨论】:

用您正在使用的数据库标记您的问题。你如何识别日期和时间? orderendorderstart 是什么? 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 分区中的情况的主要内容,如果未能解决你的问题,请参考以下文章

Oracle ---- 窗口函数

在不使用 ROW_NUMBER() OVER 函数的情况下获取分区内行(排名)的序号

Postgres 窗口函数 - rank() 按 bigint 分区

窗口函数 RANK()、DENSE_RANK() 等的特殊情况

SQL:如何在不使用 rank() 的情况下理解解决方案代码?

bigquery 分区表的分区修剪