SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.11.2017 13:21:09

dima8101
Участник
Зарегистрирован: 26.11.2017
Сообщений: 5

Запрос из двух SELECT объединить в один запрос

Подскажите как сформировать запрос объединяющий два запроса по значению (1,2, ...) в колонке id_source
Сделал два запроса:
первый


-- Выведет последние записи из source_record по id
SELECT
sr.*,
sl.name
FROM source_record sr
LEFT JOIN source_list sl ON sr.id_source = sl.id
JOIN (SELECT MAX(id) max_id FROM source_record GROUP BY id_source) last_rec ON sr.id=last_rec.max_id
 

Вывод
http://i12.pixs.ru/thumbs/8/2/0/Videlenie0_4574558_28448820.jpg

Второй

-- Выведет сумму приращений показаний по потребитялям для истчников
SELECT
cr.date,
sl.name,
cr.id_source,
sum(increment) sum
FROM consumer_record cr
LEFT JOIN source_list sl ON cr.id_source = sl.id
JOIN (SELECT MAX(id) max_id FROM consumer_record GROUP BY id_consumer) last_rec ON cr.id=last_rec.max_id
GROUP BY id_source HAVING COUNT( id_source ) >1 ORDER BY id_source
 


Вывод
http://i12.pixs.ru/thumbs/7/9/9/Videlenie0_9429540_28448799.jpg

Неактивен

 

#2 27.11.2017 17:11:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5829

Re: Запрос из двух SELECT объединить в один запрос

на первой картинке ничего не видно (слишком маленькая)

сделайте пример в виде
create table ..
insert into .. тестовые данные
и какой результат должен быть на этих тестовых данных

Неактивен

 

#3 27.11.2017 17:18:26

dima8101
Участник
Зарегистрирован: 26.11.2017
Сообщений: 5

Re: Запрос из двух SELECT объединить в один запрос

Всё оказалось до безобразия просто smile Если у кого есть предложения по оптимизации буду рад увидеть.



SELECT q2.date, q1.name, q1.record, q1.increment, q2.sum, (q1.increment - q2.sum) a
from
(
SELECT
sr.*,
sl.name
FROM source_record sr
LEFT JOIN source_list sl ON sr.id_source = sl.id
JOIN (SELECT MAX(id) max_id FROM source_record GROUP BY id_source) last_rec ON sr.id=last_rec.max_id
) q1
inner join
(
SELECT
cr.date,
sl.name,
sl.id,
sum(increment) sum
FROM consumer_record cr
LEFT JOIN source_list sl ON cr.id_source = sl.id
JOIN (SELECT MAX(id) max_id FROM consumer_record GROUP BY id_consumer) last_rec ON cr.id=last_rec.max_id
GROUP BY id_source HAVING COUNT( id_source ) >1 ORDER BY id_source
) q2 on q1.id_source=q2.id


http://s019.radikal.ru/i620/1711/f5/f091145ac137.png

Неактивен

 

#4 27.11.2017 17:29:24

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5829

Re: Запрос из двух SELECT объединить в один запрос

.. ORDER BY id_source) q2 ..  сортировка во from-подзапросе не нужна

в остальном нужно понимать исходную задачу, возможно вам пригодится Оптимизация запросов MySQL с использованием пользовательских переменных

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson