需要多列时,一列的最大值

时间:2017-04-12 21:47:52

标签: sql-server max where multiple-columns

我一直在努力解决这个问题,但却找不到合适的解决方案。我有一个非常简单的sql Db,有四列, (产品代码, 概念(1 purchse,2 return), 供应商(和), date_of_purchase

我需要得到:

|代码|供应商| date_of_purchase |

我试过了:

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)

无效

有人可以帮助我

代码, 供应商 和(只是非常最后)购买日期

每个代码在一行内

非常感谢

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

戈登的回答很有帮助。但是,结果是除了代码之外按供应商分组。所以我按照以下方式制作了每个代码的最新购买。

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;