Sql 如何使用窗口函数获取最大价格及其id?
我有这个疑问Sql 如何使用窗口函数获取最大价格及其id?,sql,tsql,sql-server-2012,aggregate-functions,window-functions,Sql,Tsql,Sql Server 2012,Aggregate Functions,Window Functions,我有这个疑问 select adate, factoryid, purchid, itemname, max(price) as price from tableb where catnum = 9 group by adate, factoryid, purchid, itemname order by adate, factoryid, purchid, itemname 但我要那排的身份证。所以在一个完美的世界里: select id, adate, factoryid, purchi
select adate, factoryid, purchid, itemname, max(price) as price
from tableb where catnum = 9
group by adate, factoryid, purchid, itemname
order by adate, factoryid, purchid, itemname
但我要那排的身份证。所以在一个完美的世界里:
select id, adate, factoryid, purchid, itemname, max(price) as price
from tableb where catnum = 9
group by adate, factoryid, purchid, itemname
order by adate, factoryid, purchid, itemname
但我知道那是行不通的
所以我试了一下:
select id, adate, factoryid, purchid, itemname,
max(price) over(partition by adate, factoryid, purchid, itemname) as price
from tableb where catnum = 9
那不行。所有ID的价格都是重复的。查询结果集从4000行增加到11000行
很明显,我不知怎么把窗口函数搞错了。首先,我做错了什么,其次,当然,我该如何修复它?我不清楚您为什么想要id,但是。。。
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY adate, factoryid, purchid, itemname ORDER BY price DESC, id DESC) rn
FROM tableb
WHERE catnum = 9
) q
WHERE rn = 1
假定
SELECT tableb.* FROM tableb
INNER JOIN
(
select adate, factoryid, purchid, itemname, max(price) as price
from tableb where catnum = 9
group by adate, factoryid, purchid, itemname
) AS grouped
ON tableb.adate = grouped.adate AND
tableb.factoryid = grouped.factoryid AND
tableb.purchid = grouped.purchid AND
tableb.itemname = grouped.itemname AND
tableb.price = grouped.price
order by tableb.adate, tableb.factoryid, tableb.purchid, tableb.itemname
您可以使用Windows版本的
MAX
以及,可从SQL Server 2012+获得:
SELECT DISTINCT adate, factoryid, purchid, itemname,
MAX(price) OVER (PARTITION BY adate, factoryid, purchid, itemname) AS price,
FIRST_VALUE(id) OVER (PARTITION BY adate, factoryid, purchid, itemname
ORDER BY price DESC) AS id
FROM tableb
WHERE catnum = 9
ORDER BY adate, factoryid, purchid, itemname
id不是唯一确定的。你想要所有的ID还是任何一个?