powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN таблицы (по минимальной, максимальной дате)
10 сообщений из 10, страница 1 из 1
LEFT JOIN таблицы (по минимальной, максимальной дате)
    #39407784
Есть две таблицы
Первая
Номер документа (id), Дата создания (_date)

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

Можно ли LEFT JOIN вторую к первой дважды чтобы получить два новых параметра на выходе
Первое и последнее изменение
...
Рейтинг: 0 / 0
LEFT JOIN таблицы (по минимальной, максимальной дате)
    #39407790
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно. Потребуется две копии второй таблицы. А для простоты реализации - два подзапроса.
...
Рейтинг: 0 / 0
LEFT JOIN таблицы (по минимальной, максимальной дате)
    #39407838
А как-то без подзапросов
Хотелось бы оставить производительность
...
Рейтинг: 0 / 0
LEFT JOIN таблицы (по минимальной, максимальной дате)
    #39407842
Хотя-бы вывести один
Последний созданный элемент из таблицы 2
...
Рейтинг: 0 / 0
LEFT JOIN таблицы (по минимальной, максимальной дате)
    #39407989
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай ЖуковХотелось бы оставить производительностьда ты сперва хоть как-нибудь сделай! а потом уже будешь за производительность думать...
...
Рейтинг: 0 / 0
LEFT JOIN таблицы (по минимальной, максимальной дате)
    #39408602
Да это уже работает
Полностью запрос выглядит так
Код: 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
LEFT JOIN таблицы (по минимальной, максимальной дате)
    #39408605
Вопрос та не в этом
Можно ли LEFT JOIN получить первое и последнее вложение в другую таблицу
...
Рейтинг: 0 / 0
LEFT JOIN таблицы (по минимальной, максимальной дате)
    #39408726
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коррелированные подзапросы - УБРАТЬ! Должно быть

LEFT JOIN (подзапрос, дающий ID всех документов и MIN либо MAX даты изменения для каждого документа)
...
Рейтинг: 0 / 0
LEFT JOIN таблицы (по минимальной, максимальной дате)
    #39410545
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
LEFT JOIN таблицы (по минимальной, максимальной дате)
    #39410574
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай Жуковкак в 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
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN таблицы (по минимальной, максимальной дате)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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