![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Есть таблица платёжек:
Код:
№Счёта №Платёжки Сумма Дата 1 1 14 12.10.2014 1 2 21 13.10.2014 1 3 11 14.10.2014 2 4 18 15.10.2014 2 5 4 21.10.2014 Код:
№Счёта №Платёжки Сумма Дата 1 2 21 13.10.2014 2 4 18 15.10.2014 Используется MySQL Запрос типа Код:
SELECT ContractID, -- (№Счёта) BillingID, -- (№ Платёжки) MAX(Summ), -- (Сумма) BillingDate -- (Дата) FROM BIlls GROUP BY ContractID провалился. В поля BillingDate и BillingID подставляются наименьшие "по порядку" значения (т.е. первые из списка) Ломаю голову над вложенными запросами, но что-то ничего толкового в голову не пришло. |
|
#2
|
|||
|
|||
|
Посмотри, твоя версия MySQL поддерживает оконные функции?
Если да, то можно попробовать что-то типа: Код:
select acc_no,
last_value(doc_no) over (partition by acc_no order by summ asc) as doc_id,
last_value(summ) over (partition by acc_no order by summ asc) as summ_id,
last_value(doc_dt) over (partition by acc_no order by summ asc) as doc_dt_id
from demo
group by acc_no |
|
#3
|
|||
|
|||
|
Вот запрос без оконных функций, но он может вернуть больше чем 1 строку для счета, если для какого-то счета будет 2 одинаковые максимальные суммы:
Код:
select acc_no, doc_no, summ, doc_dt from demo d where summ = (select MAX(summ) from demo dd where d.acc_no = dd.acc_no) |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Uniq! (19.11.2015)
| ||
|
#4
|
||||
|
||||
|
Цитата:
Во внутреннем запросе пропущена группировка по doc_no. Спасибо, я разобрался. Такая простая задача, и такое угрюмое решение. |