如何使用 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 子句?