Интересный SQL-запрос - PullRequest
       19

Интересный SQL-запрос

1 голос
/ 24 октября 2011

У меня есть эти данные в моей таблице:

onum    amt         odate                       cnum    snum

3001    18,69       1990-03-10 00:00:00.000     2008    1007
3002    1900,10     1990-03-10 00:00:00.000     2007    1004
3003    767,19      1990-03-10 00:00:00.000     2001    1001
3005    5160,45     1990-03-10 00:00:00.000     2003    1002
3006    1098,16     1990-03-10 00:00:00.000     2008    1007
3007    75,75       1990-03-10 00:00:00.000     2004    1002
3008    4723,00     1990-05-10 00:00:00.000     2006    1001
3009    1713,23     1990-04-10 00:00:00.000     2002    1003
3010    1309,95     1990-06-10 00:00:00.000     2004    1002
3011    9891,88     1990-06-10 00:00:00.000     2006    1001

Мне нужно получить такой результат:

amt         odate                       snum

5160,45     1990-03-10 00:00:00.000     1002
4723,00     1990-05-10 00:00:00.000     1001
9891,88     1990-06-10 00:00:00.000     1001

, то есть я выбираю максимум amt на каждый день odate, но с отображением продавца snum

, если я напишу это:

 SELECT MAX(amt), odate, snum 
 FROM [Understanding].[dbo].[Orders] 
 GROUP BY odate, snum

вывод неправильный, поскольку он отображает группы по дням и продавцам.

Ответы [ 2 ]

4 голосов
/ 24 октября 2011
;with C as
(
  select amt,
         odate,
         snum,
         row_number() over(partition by odate order by amt desc) as rn
  from Orders
)
select amt,
       odate,
       snum
from C
where rn = 1       
0 голосов
/ 26 марта 2013
select a.*,b.snum
from
(
select MAX(amt) as amt
      ,odate 
from Orders
group by odate
)A INNER JOIN Orders B
ON A.amt = b.amt
order by a.odate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...