我有一个包含以下各列的表:
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] 删除。
我来说两句