powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / join один ко многим
12 сообщений из 12, страница 1 из 1
join один ко многим
    #40077169
Фотография unq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть табличка 1 и табличка 2
в табличке 1 колонка ID уникальна во второй табличке ID множественна
связь по ID. Во второй табличке записи отличаются по штампу времени
Как заджоинить так чтобы выбрались левые записи + записи с максимальным временем из правой таблицы.
Дайте пример плиз.
...
Рейтинг: 0 / 0
join один ко многим
    #40077174
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unq,

select max() ... group by tbl1.id
...
Рейтинг: 0 / 0
join один ко многим
    #40077179
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unq,

Код: sql
1.
2.
3.
4.
5.
6.
select t1.ID, f.Date
from table1 t1
  outer apply (select top(1) t2.Date
                     from table2 t2
                     where t2.ID = t1.ID
                     order by t2.Date desc) f



Строго обязательно при этом иметь индекс на второй таблице (ID, Date). Желательно же (ID, Date desc).
...
Рейтинг: 0 / 0
join один ко многим
    #40077180
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
join один ко многим
    #40077181
Фотография unq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unq,

сам себе отвечу, наверн так
поправьте если есть ошибка

Код: sql
1.
2.
3.
4.
5.
SELECT
 *
 FROM table1 p
 right JOIN(select * from table2 s where TimeStamp =
 (SELECT MAX(TimeStamp) FROM table2 b1 WHERE id = s.ID)) b ON b.id = p.id
...
Рейтинг: 0 / 0
join один ко многим
    #40077185
Фотография unq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем за быстрые ответы!

вариант с join срабатывает за ~8мс
вариант с apply за ~35мс

остановлюсь пожалуй на join
...
Рейтинг: 0 / 0
join один ко многим
    #40077187
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unq
Спасибо всем за быстрые ответы!

вариант с join срабатывает за ~8мс
вариант с apply за ~35мс

остановлюсь пожалуй на join


А индексы у вас есть или нет? А то как-то крайне странно выходит, что агрегатная функция отрабатывает быстрее, чем проход по узлам индекса.
...
Рейтинг: 0 / 0
join один ко многим
    #40077191
Фотография unq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кесарь,

Слева ID и Name
справа ID и RowID
...
Рейтинг: 0 / 0
join один ко многим
    #40077197
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unq
Кесарь,

Слева ID и Name
справа ID и RowID


Если задача регулярна и важна, сделайте индекс (ID, Date desc). Увидите эффект сразу.
...
Рейтинг: 0 / 0
join один ко многим
    #40077211
Фотография unq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кесарь,

Спасибо, попробую
...
Рейтинг: 0 / 0
join один ко многим
    #40077214
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кесарь
unq
Кесарь,

Слева ID и Name
справа ID и RowID


Если задача регулярна и важна, сделайте индекс (ID, Date desc). Увидите эффект сразу.


Не увидит.
Писание коррелированных запросов - высокое искусство.
Но они ничем, кроме неочевидности, не хуже apply.
...
Рейтинг: 0 / 0
join один ко многим
    #40077217
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unq
Кесарь,

Спасибо, попробую


Кстати, вы тут упомянули для правой таблицы RowID. Так вот, если у вас поле с датой однозначно логически связано с этим RowID (например дата - это датавремя вставки записи), то можете попробовать заменить дату на это РоуИД и в запросах, и в индексах.

Если РоуИД у вас ИНТ, то будет выигрыш и по скорости, и по размеру индекса (по сравнению с дейттайм, конечно, а не дейт).
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / join один ко многим
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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