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

select max() ... group by tbl1.id
...
Рейтинг: 0 / 0
11.06.2021, 13:09
    #40077179
Кесарь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join один ко многим
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
11.06.2021, 13:09
    #40077180
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join один ко многим
...
Рейтинг: 0 / 0
11.06.2021, 13:10
    #40077181
unq
unq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join один ко многим
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
11.06.2021, 13:21
    #40077185
unq
unq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
join один ко многим
Спасибо всем за быстрые ответы!

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

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

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

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


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

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

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


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

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

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


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


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

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


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

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


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