|
|
|
Выбор старшего значения в group by
|
|||
|---|---|---|---|
|
#18+
Всех приветствую! Столкнулся с такой проблемой: Есть 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, но это полный бред. Прошу помощи.ф ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 18:16:03 |
|
||
|
Выбор старшего значения в group by
|
|||
|---|---|---|---|
|
#18+
Виктор Н.пробовал ставить в селекте MAX(invoices.crdata) - выбирает самую позднюю дату, но при этом invoices.summa выбирается самая первая по таблице.Вы неправильно делаете группировку, посмотрите тут или тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 19:34:16 |
|
||
|
Выбор старшего значения в group by
|
|||
|---|---|---|---|
|
#18+
Благодарю. Пробовал всеми способами из указанных Вами ссылок, работают, но с временем выполнения запроса от 3х минут - это много, при этом всё-таки один метод очень помог: SELECT `user_id`, max(`time`), SUBSTR(MAX(CONCAT(`time`, `post`)), 20) as `post` FROM `test_table` GROUP BY `user_id`; Выполняется такой скрипт мгновенно и вполне подходит под поставленную задачу, ещё раз благодарю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2015, 10:53:23 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1833216]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
10ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 387ms |

| 0 / 0 |
