Mam tabelę z kilkoma kolumnami:
Name Price Date ...
a 100 .....
b 110 .....
c 90 .....
a 130 .....
b 60 .....
d 200 .....
c 5 .....
Chcę napisać zapytanie, które da mi maksymalną cenę każdego imienia:
a 130 .....
b 110 .....
c 90 .....
d 200 .....
Odpowiedzi:
1 dla odpowiedzi № 1Spróbuj tego:
SELECT *
FROM
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Name
ORDER BY Name ASC, Price DESC) AS RN
FROM Table
) AS T
WHERE RN = 1
0 dla odpowiedzi nr 2
Użyj tego
SELECT tbl1.* FROM table_1 tbl1 INNER JOIN(
SELECT name,MAX(price) price FROM table_1 GROUP BY name) tbl2
ON tbl1.name = tbl2.name AND tbl1.price = tbl2.price
kod zreformowany;)
0 dla odpowiedzi № 3
;with cte as(
select
rn = row_number() over(partition by Name order by Price desc),
*
from <table name>
)
select
<columns>
from cte
where rn = 1
-1 dla odpowiedzi № 4
select Name, Price, Date from (select max(Price)as p, Name as n from TableName
group by Name) as A
inner join
(select * from from TableName where A.p=price and A.n=Name) as B
Spróbuj tego.