Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с запросом SQL Server Management Studio  [new]
kat123
Member

Откуда:
Сообщений: 5
Таблица PLATEGI соединена с таблицей ZAPROS p.id=z.plateg_id, ZAPROS соединена с таблицей CLIENTS z.client_id=c.id.
Поля таблицы PLATEGI: id, PlatedTime, Summ, Zapros_Id, PlategStatus.
Поля таблицы ZAPROS: id, client_id, plateg_id
Поля таблицы CLIENTS: id, Firstname, Lastname, Middlename
Необходимо вывести максимальную сумму успешной оплаты и ФИО плательщика. Успешная оплата - 2, не успешная - 4(PlategStatus).
Что я делаю не так?


SELECT c.Firstname, c.Lastname, c.Middlename, MAX(p.summ)
from Plategi p
join Zapros z on p.id=z.plateg_id
join Clients c on z.client_id=c.id
where p.id=z.plateg_id and z.client_id=c.id and p.Plategstatus=2
GROUP BY c.Firstname, c.Lastname, c.Middlename HAVING MAX(p.summ)>0;

К сообщению приложен файл. Размер - 72Kb
30 окт 15, 18:05    [18350406]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом SQL Server Management Studio  [new]
o-o
Guest
надо-то что, одну максимальную сумму и соответствующего плательщика
(ну или несколько их будет с одной и той же суммой)
или по каждому из плательщиков вывести его макс. успешную оплату?
30 окт 15, 18:18    [18350441]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом SQL Server Management Studio  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
kat123, может, так?

SELECT top 1 c.Firstname, c.Lastname, c.Middlename, p.summ
from Plategi p
  join Zapros z on p.id=z.plateg_id
  join Clients c on z.client_id=c.id
where p.Plategstatus=2
ORDER BY p.SUMM desc
30 окт 15, 19:38    [18350792]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом SQL Server Management Studio  [new]
kat123
Member

Откуда:
Сообщений: 5
o-o, нужно вывести одну максимальную успешную оплату из таблицы и фио, т.е. должно получиться: Хабибрахманова Найля Накитовна 5500.00
30 окт 15, 20:09    [18350921]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом SQL Server Management Studio  [new]
kat123
Member

Откуда:
Сообщений: 5
Serg_77m, спасибо, работает, но мне именно с max надо
30 окт 15, 20:12    [18350934]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом SQL Server Management Studio  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
kat123, ну тогда так. Только я ничего не знаю о типах Plategi.summ и Clients.id, предполагаю numeric(19,2) и int соответственно.

SELECT c.Firstname, c.Lastname, c.Middlename, 
  cast(substring(p.maxs,1,19) as numeric(19,2)) as summ
from (
  SELECT max(str(p.summ,19,2)+str(z.client_id,12)) as maxs
  from Plategi p
    join Zapros z on z.plateg_id=p.id
  where p.Plategstatus=2 and p.summ>0
) p
  join Clients c on c.id=cast(substring(p.maxs,20,12) as int)


Или ещё так можно, но если вдруг наибольшая сумма будет одинаковая у нескольких клиентов, будут выданы все:
SELECT Firstname, Lastname, Middlename, summ
from (
  SELECT c.Firstname, c.Lastname, c.Middlename, p.summ,
    MAX(p.summ) over () as maxs
  from Plategi p
    join Zapros z on p.id=z.plateg_id
    join Clients c on z.client_id=c.id
  where p.Plategstatus=2
) p
where summ=maxs


А если это студенческая задачка, может быть, ожидается увидеть что-то вроде этого. Только оно хуже в смысле производительности.
SELECT c.Firstname, c.Lastname, c.Middlename, p.summ
from Plategi p
  join Zapros z on p.id=z.plateg_id
  join Clients c on z.client_id=c.id
where p.Plategstatus=2
  and p.summ=(select MAX(summ) from Plategi where Plategstatus=2)
30 окт 15, 21:03    [18351219]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом SQL Server Management Studio  [new]
kat123
Member

Откуда:
Сообщений: 5
Serg_77m, все работает как надо, очень Вам благодарна)
но мне не понятно все же, почему мой вариант не выдавал ожидаемый результат)
2 ноя 15, 11:00    [18357699]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом SQL Server Management Studio  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
kat123
Serg_77m, все работает как надо, очень Вам благодарна)
но мне не понятно все же, почему мой вариант не выдавал ожидаемый результат)
Там стоит группировка по плательщикам, в результате чего он выдаёт максимальную сумму успешной оплаты отдельно по каждому плательщику, а не максимальную вообще.
2 ноя 15, 14:32    [18359264]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом SQL Server Management Studio  [new]
kat123
Member

Откуда:
Сообщений: 5
Serg_77m, СПАСИБО ОГРОМНОЕ)))
2 ноя 15, 23:34    [18361871]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить