【发布时间】:2020-09-11 16:56:52
【问题描述】:
我有一个表格,其中包含供应商交付流程中每个步骤的条目。
例如:到达、内部部署、卸载和外部部署。
当每个步骤发生时,我们会捕获它发生的时间戳。
我想为所有状态 ID 大于或等于 30 的供应商选择其在内部部署的持续时间。换句话说,最大状态 ID - 最小状态 ID 其中最小状态 ID >= 30
请注意,并非所有步骤都必须完成,我需要为该供应商选择最高的步骤。
如何在 SQL 中执行此操作?
我的供应商交货历史表的列:
GUID ID,
DATETIME TimeStamp,
GUID FK_SupplierDeliveryID,
TINYINT FK_SupplierDeliveryStatusID
供应商交货状态表的列:
TINYINT ID,
NVARCHAR Description,
供应商表:
GUID ID,
NVARCHAR SupplierName
理想情况下,我想从查询中返回以下字段:
SupplierID, SupplierName, LastStatus, Time In, Time Out, Elapse
其中Supplier ID是供应商表的ID,Supplier Name是供应商表的描述,LastStatus是为供应商捕获的最大StatusKey,Time In是条目的日期StatusKey = 30、Time Out 是为供应商捕获的最大StatusKey 的输入日期为= 40,否则为空,Elapse = Time Out - Time In
我试过了:
SELECT
sdh.FK_SupplierDeliveryID,
MAX(sdh.StatusKey) AS HighestStatus,
MIN(sdh.StatusKey) AS LowestStatus,
MAX(sdh.StatusDate) AS HighestDate,
MIN(sdh.StatusDate) AS LowestDate
FROM
SupplierDeliveryStatusHistory AS sdh
WHERE
sdh.StatusKey> 30
GROUP BY
sdh.FK_SupplierDeliveryID,
sdh.StatusKey
【问题讨论】:
-
请以表格文本形式提供示例数据和所需结果。
-
请标记你的数据库。
-
上下文中的最小值是Status key = 30的条目
标签: sql