Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбор старшего значения в group by / 3 сообщений из 3, страница 1 из 1
11.05.2015, 18:16:03
    #38955864
Виктор Н.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор старшего значения в group by
Всех приветствую!
Столкнулся с такой проблемой:
Есть 2 таблицы:
1. firms
id integer
name text
2. invoices
id integer
id_firms integer
summa float
crdata datetime
В таблице invoices хранятся к каждой фирме много платежей по принципу - дата и время платежа и сумма.
Нужно одним запросом показать все организации и сумму самой поздней оплаты вместе с её датой,например:
--
SELECT
firms.name,
invoices.crdata,
invoices.summa
FROM
firms
RIGHT JOIN invoices ON firms.id = invoices.id_firms
GROUP BY
invoices.id_firms
ORDER BY
invoices.crdata DESC
--
И вот начинается самое интересное, order by не помогает по понятным причинам, вложенные запросы помогают, но работают оооочень долго (до 300 секунд и более), пробовал ставить в селекте MAX(invoices.crdata) - выбирает самую позднюю дату, но при этом invoices.summa выбирается самая первая по таблице. Пробовал разные экзотические способы, некоторые из которых срабатывали, но время выполнения скрипта всегда шло от 300 секунд, в то время как скрипт написанный выше выполняется за менее чем секунду.
Временно решил вопрос некорректно: в цикле вывода организаций выполняется при выводе каждой организации внутренний запрос, который отдельно выбирает самую позднюю оплату из таблицы invoices, работает секунд за 10, но это полный бред.
Прошу помощи.ф
...
Рейтинг: 0 / 0
11.05.2015, 19:34:16
    #38955906
retvizan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор старшего значения в group by
Виктор Н.пробовал ставить в селекте MAX(invoices.crdata) - выбирает самую позднюю дату, но при этом invoices.summa выбирается самая первая по таблице.Вы неправильно делаете группировку, посмотрите тут или тут
...
Рейтинг: 0 / 0
12.05.2015, 10:53:23
    #38956165
Виктор Н.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор старшего значения в group by
Благодарю.
Пробовал всеми способами из указанных Вами ссылок, работают, но с временем выполнения запроса от 3х минут - это много, при этом всё-таки один метод очень помог:
SELECT `user_id`, max(`time`), SUBSTR(MAX(CONCAT(`time`, `post`)), 20) as `post`
FROM `test_table` GROUP BY `user_id`;
Выполняется такой скрипт мгновенно и вполне подходит под поставленную задачу, ещё раз благодарю!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбор старшего значения в group by / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]