|
|
Регистрация | << Правила форума >> | 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. Спасибо, я разобрался. Такая простая задача, и такое угрюмое решение. |