【问题标题】:Selecting a Max and Min from the same column in SQL in a single query在单个查询中从 SQL 中的同一列中选择最大值和最小值
【发布时间】: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是为供应商捕获的最大StatusKeyTime In是条目的日期StatusKey = 30Time 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


【解决方案1】:

您在 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

【讨论】:

  • 我对此进行了扩展并且成功了,谢谢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 removed here,
猜你喜欢
  • 2015-02-03
  • 2013-10-26
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
相关资源
最近更新 更多