我有一张表,其中包含供应商交付过程中每个步骤的条目。
例如:到达,内部部署,卸载和内部部署。
这些步骤中的每一个发生时,我们都会捕获发生的时间戳。
我想为状态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
否则为null和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
您正在汇总该sdh.StatusKey
列,因此不应按其分组:
SELECT
sdh.FK_SupplierDeliveryID,
MAX(sdh.StatusKey) AS HighestStatus,
MIN(sdh.StatusKey) AS LowestStatus
FROM
SupplierDeliveryStatusHistory AS sdh
WHERE
sdh.StatusKey> 30
GROUP BY
sdh.FK_SupplierDeliveryID -- sdh.StatusKey removed here
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句