Oracle SQL按时间间隔分组

我有一个包含以下各列的表:

order_number
customer_number
creation_date
estimated_ship_date

我需要为具有相同customer_number的所有记录选择maximest_ship_date,并且creation_date彼此相距15分钟以内。它可以是任意数量的记录,我会说最多1-50个。

因此,基本上可以在15分钟内按customer_number和creation_date进行分组。我被困在彼此之间15分钟内的creation_date。

亚历克斯·普尔

如果您仅需将行全部都落在一个15分钟的跨度内而将行视为一个组,则可以使用windowing子句

select order_number, customer_number, creation_date, estimated_ship_date,
  max(estimated_ship_date) over (partition by customer_number order by creation_date
    range between 15/1440 preceding and 15/1440 following) as estimated_ship_date
from cust_orders;

这样一来,表格的每一行就会返回一列,该列会显示当前行两边十五分钟*的任何行的最大发货日期。

如果您有一系列的订单,每个订单都在上一个订单的15分钟之内,但它们却不在所有其他订单的15分钟之内,那么它可能并没有达到您的期望-正如我之前的评论中的示例。听起来您可能不希望出现这种情况,或者无论如何都不想将它们分组在一起,但是如果分组确实发生,则需要查看分组的工作方式,并可能对其进行一些调整。

* Oracle日期算术基于1代表一整天,因此15分钟为(15 * 60)/(24 * 60 * 60)秒;或900/86400;或15 /(24 * 60); 或15/1440;或1/96;等。您使用哪种表示形式取决于口味和可维护性。如果愿意,也可以使用间隔。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章