当另一列不为NULL时,lead()是否可以返回下一个值



我正在尽我最大的努力,但我似乎仍然无法做到这一点。

看看下表,你可以想到某家公司在工作日的交货时间,以及他们收到订单时使用的各种截止时间。简单地说,我想要";desired_outcome(下一次递送(";根据cutoff1不为空的时间,显示下一次交货的工作日。

因此,以A公司为例,如果订单在周日20:00之后下,则会在周一交付,因为他们在周一交付(cutoff 1不为空(。然而,如果有人在周一23:30后或周二的任何时候下单,他们将不得不等到周三公司再次发货。如果客户在周六18:00之后下单,他们将不得不等到周日。这里的问题是,我尝试过使用LEAD((,但这只会获取下一个值,即使cutoff1为null。我希望函数获取";下一个";cutoff1不为空的工作日,所以这几乎是一个窗口函数(lead(,但有条件。只有当cutoff1不为空时,才给我下一个值。当lead((在最后一行返回null时,我需要它";从列表的开头开始";并且获取截止不为空的第一个工作日。

有什么想法吗?这真让我头疼。

示例:

cutoff1>cutoff3>[/tr>1><15:00>>13:00<15:00>>>>>1
Merchant_name 工作日cutoff21desired_outcome(下一次交付(
公司A 0 13:00 15:00 20:00
公司A 1 13:00 15:00 23:303
公司A 2 NULL NULL 3
公司A 3 13:00 15:00 19:00 4
公司A 4 13:005
公司A 5 13:00 15:00 18:006
公司A 618:000
公司B 0 NULL NULL 1
公司B 1 13:00 15:00 23:303
公司B 2 NULL NULL 3
公司B 3 13:00 15:00 19:005
公司B 4 NULL NULL 5
公司B 5 13:00 15:00 18:006
公司B 6 13:00 15:00 18:00

您可能需要以下内容,使用相关子查询来选择下一个符合条件的工作日:

select *, (
select Coalesce(Min(case when t2.weekday > t.weekday then t2.weekday  end) over(), t2.weekday)
from t t2 
where t2.Merchant_name=t.Merchant_name
and t2.cutoff1 is not null
limit 1
) Outcome
from t;

相关内容

  • 没有找到相关文章

最新更新