Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN таблицы (по минимальной, максимальной дате) / 10 сообщений из 10, страница 1 из 1
20.02.2017, 13:38
    #39407784
LEFT JOIN таблицы (по минимальной, максимальной дате)
Есть две таблицы
Первая
Номер документа (id), Дата создания (_date)

Вторая
Номер документа (id), Дата изменения (change_date)

Можно ли LEFT JOIN вторую к первой дважды чтобы получить два новых параметра на выходе
Первое и последнее изменение
...
Рейтинг: 0 / 0
20.02.2017, 13:42
    #39407790
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN таблицы (по минимальной, максимальной дате)
Можно. Потребуется две копии второй таблицы. А для простоты реализации - два подзапроса.
...
Рейтинг: 0 / 0
20.02.2017, 14:39
    #39407838
LEFT JOIN таблицы (по минимальной, максимальной дате)
А как-то без подзапросов
Хотелось бы оставить производительность
...
Рейтинг: 0 / 0
20.02.2017, 14:44
    #39407842
LEFT JOIN таблицы (по минимальной, максимальной дате)
Хотя-бы вывести один
Последний созданный элемент из таблицы 2
...
Рейтинг: 0 / 0
20.02.2017, 16:57
    #39407989
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN таблицы (по минимальной, максимальной дате)
Николай ЖуковХотелось бы оставить производительностьда ты сперва хоть как-нибудь сделай! а потом уже будешь за производительность думать...
...
Рейтинг: 0 / 0
21.02.2017, 16:30
    #39408602
LEFT JOIN таблицы (по минимальной, максимальной дате)
Да это уже работает
Полностью запрос выглядит так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT i.id,i.number,i._date,i.brutto,i.tara,a.auth,
	(IF(ic1.ai!=ic2.ai,2,1)) AS libra,
	ic1.brutto AS brutto1,ic1.tara AS tara1,
    ic2.brutto AS brutto2,ic2.tara AS tara2,  
    ic._date AS rmdate,ar.auth AS rmauth,
    CONCAT(ii.org,' (',ii.culture,')[',ii.car_number,'] ',ii.info) AS info
FROM _inv AS i
LEFT JOIN _adm AS a ON i.adm=a.id
LEFT JOIN _inv_change AS ic1 ON ic1.ai=(
    SELECT MIN(ic.ai) FROM _inv_change AS ic WHERE ic.id=i.id
    AND ic.type='libra'
	)
LEFT JOIN _inv_change AS ic2 ON ic2.ai=(
    SELECT MAX(ic.ai) FROM _inv_change AS ic WHERE ic.id=i.id
    AND ic.type='libra'
	)
LEFT JOIN _inv_change AS ic ON ic.id=i.id AND ic.type='remove'
LEFT JOIN _adm AS ar ON ic.adm=ar.id
LEFT JOIN _inv_info AS ii ON ii.id=i.id
WHERE i.visible=-1 
ORDER BY i._date DESC


и в нем Минимум и Максимум соответственно
Код: sql
1.
2.
3.
4.
LEFT JOIN _inv_change AS ic1 ON ic1.ai=(
    SELECT MIN(ic.ai) FROM _inv_change AS ic WHERE ic.id=i.id
    AND ic.type='libra'
	)


и
Код: sql
1.
2.
3.
4.
LEFT JOIN _inv_change AS ic2 ON ic2.ai=(
    SELECT MAX(ic.ai) FROM _inv_change AS ic WHERE ic.id=i.id
    AND ic.type='libra'
	)
...
Рейтинг: 0 / 0
21.02.2017, 16:32
    #39408605
LEFT JOIN таблицы (по минимальной, максимальной дате)
Вопрос та не в этом
Можно ли LEFT JOIN получить первое и последнее вложение в другую таблицу
...
Рейтинг: 0 / 0
21.02.2017, 19:19
    #39408726
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN таблицы (по минимальной, максимальной дате)
Коррелированные подзапросы - УБРАТЬ! Должно быть

LEFT JOIN (подзапрос, дающий ID всех документов и MIN либо MAX даты изменения для каждого документа)
...
Рейтинг: 0 / 0
27.02.2017, 03:20
    #39410545
LEFT JOIN таблицы (по минимальной, максимальной дате)
AkinaКоррелированные подзапросы - УБРАТЬ! Должно быть

LEFT JOIN (подзапрос, дающий ID всех документов и MIN либо MAX даты изменения для каждого документа)

А как в LEFT JOIN использовать MIN либо MAX
Там просто есть _date и ia (AUTO_INCREMENT)

Все ID это

Код: sql
1.
LEFT JOIN _inv_change AS ic1 ON ic1.id=i.id AND ic.type='libra'
...
Рейтинг: 0 / 0
27.02.2017, 07:48
    #39410574
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN таблицы (по минимальной, максимальной дате)
Николай Жуковкак в LEFT JOIN использовать MIN либо MAX
Типа
Код: sql
1.
2.
3.
4.
5.
6.
SELECT f.id, f._date, q.dmin, q.dmax
FROM first_table f
LEFT JOIN ( SELECT s.id, MIN(s.change_date) dmin, MAX(s.change_date) dmax
            FROM second_table s
            GROUP BY s.id
          ) q ON q.id = f.id
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN таблицы (по минимальной, максимальной дате) / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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