我一直在努力解决这个问题,但却找不到合适的解决方案。我有一个非常简单的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)
无效
有人可以帮助我
代码, 供应商 和(只是非常最后)购买日期
每个代码在一行内?
非常感谢
答案 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;