如何使用 case 语句中的函数返回值以选择每个函数的 MAX?

Posted

技术标签:

【中文标题】如何使用 case 语句中的函数返回值以选择每个函数的 MAX?【英文标题】:How do I return a value using a function within a case statement to choose the MAX of each function? 【发布时间】:2021-12-23 13:20:03 【问题描述】:

我有一个查询,我正在使用函数计算多个日期/时间之间的差异。它以分钟为单位返回两个日期之间的时间(第一行为 imported_date 和 create_date,第二行为 pick_date 和 packed_on_date)。

以下示例: dbo.WorkTime(o.imported_date,pkd.create_date) dbo.WorkTime(pkd.picked_date, hums.packed_on_date)

我想要的结果是根据花费时间最长的过程为每一行返回一个状态。如果我在 excel 中执行此操作,我会创建一个 IF 语句。

有没有办法让我写一个 case 语句或其他东西来根据每个函数处理时间的 MAX 返回一个状态?

【问题讨论】:

创建一个返回两个值中最大值的函数,然后将 WorkTime 的结果传递给该函数。 Edit 问题并标记您正在使用的 DBMS。 【参考方案1】:

试试这个作为查询

select   ( case when dbo.WorkTime(o.imported_date,pkd.create_date) >=
dbo.WorkTime(pkd.picked_date, hums.packed_on_date) then 
dbo.WorkTime(o.imported_date,pkd.create_date) else 
dbo.WorkTime(pkd.picked_date, hums.packed_on_date) end )  MaxTime

或者声明一个变量

 declare @MaxTime float;
 Set  @MaxTime = ( case when dbo.WorkTime(o.imported_date,pkd.create_date) >= 
 dbo.WorkTime(pkd.picked_date, hums.packed_on_date) then
 dbo.WorkTime(o.imported_date,pkd.create_date) else  
 dbo.WorkTime(pkd.picked_date, hums.packed_on_date)
 end )  MaxTime
 return @MaxTime;

【讨论】:

我可以用 MAX 时间带回一个实际的标志吗?如果有意义的话,我希望它返回“Pick Delay”或“Pack Delay”而不是返回实际的时间量。 选择(当 dbo.WorkTime(o.imported_date,pkd.create_date) >= dbo.WorkTime(pkd.picked_date, hums.packed_on_date) 然后 dbo.WorkTime(o.imported_date,pkd.create_date) ) else dbo.WorkTime(pkd.picked_date, hums.packed_on_date) end ) MaxTime,当然 尝试像这样再次使用 case 语句( case when dbo.WorkTime(o.imported_date,pkd.create_date) >= dbo.WorkTime(pkd .picked_date, hums.packed_on_date) 然后 'imported_date' else 'picked_date' end ) As Descroptin

以上是关于如何使用 case 语句中的函数返回值以选择每个函数的 MAX?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 case 语句来确定存储过程中的 from 和 where 子句?

SQL之case when

选择 4 个值以从其他列返回一个值

如何从oracle sql中的选择计数中对rownum使用case语句?

数组迭代

SQL Server 2008 - SELECT 子句中的 Case / If 语句 [重复]