【问题标题】:Max value from one column when several columns needed当需要几列时,一列的最大值
【发布时间】:2017-04-12 21:47:52
【问题描述】:

我一直在努力解决这个问题,但无法找到合适的解决方案。我有一个非常简单的四列 sql Db, (产品代码, 概念(1购买,2退货), 供应商(和), 购买日期

我需要得到:

|代码 |供应商|购买日期 |

我试过了:

SELECT  
    code,
    supplier,
    MAX (date_of_purchase)

FROM SSQL_E03.dbo.pchs

WHERE   concept =1
GROUP BY code, supplier
ORDER BY code

如果我不按代码和供应商分组,我会收到错误消息,但我当然不需要每个供应商的最后一次购买,而只需要每个代码的最后一次购买,我也尝试过

WHERE concept = 1 AND date_of_purchase = MAX(date_of_purchase)

这也没用

谁能帮帮我

代码, 供应商, 和(仅最后一个)购买日期_

每个代码都在一行内?

非常感谢

【问题讨论】:

  • 用您正在使用的数据库标记您的问题:
  • 可能要检查 SQL 中的HAVING 子句。

标签: sql-server max where multiple-columns


【解决方案1】:

大多数数据库都支持 ANSI SQL row_number() 函数:

SELECT p.*
FROM (SELECT p.*,
             ROW_NUMBER() OVER (PARTITION BY supplier ORDER BY date_of_purchase DESC) as seqnum
      FROM SSQL_E03.dbo.pchs p
      WHERE concept = 1
     ) p
WHERE seqnum = 1;

【讨论】:

    【解决方案2】:

    戈登的回答很有帮助。但是,结果是按供应商而不是代码进行分组。所以我按照下面的方法来获取每个代码的最新购买。

    SELECT p.*
    FROM (
    SELECT p.*,
    ROW_NUMBER() OVER (PARTITION BY code ORDER BY date_of_purchase DESC) as latest
    FROM stackOver  p
    WHERE concept = 1
    ) p
    WHERE latest=1;
    

    【讨论】:

      猜你喜欢
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-04
      相关资源
      最近更新 更多