Страницы: 1
RSS
Зависает SQL-запрос содержащий вложенный зависимый запрос
 
Excel 2013.

Доброго дня!
Столкнулся с такой проблемой.

Есть условно две таблицы, которые нужно импортировать из Access и объединить:

T1 с полями KOD, Name, Date, G1, G2, GX...  (около 200 000 записей)
T2 с полями KOD, sGroup, DateIn (около 8 000 записей)

Их нужно объеденить чтобы добавить в T1 поле Group
Объединение по полям KOD но в Т2 это поле не уникально, есть вариации записей по полям DateIn и искомому Group.
Поэтому должно соблюдаться еще одно условие Date = MAX(диапазон DateIn, где DateIn <=Date)

С импортом в Эксель проблем нет, проблемы с объединением (что в Access, что в Эксле)

Написал такой вот SQL.
Код
SELECT T1.*, 
     (SELECT TOP 1 sGroup FROM T2 WHERE T1.KOD=T2.KOD ORDER BY DateIn DESC) as GroupName
FROM T1

Вложенный запрос сам по себе работает, но как тольок его вставляю во внешний - запрос начинает отработку и зависает.
В Excell - сразу, в Access при попытке получить все резульаты запроса (а так оказывает видимые строки на экране, общее кол-во записей не выводит).

Может кто знает как модифицировать запрос, чтобы он заработал ?
Например можно ли заменить вложенный запрос LEFT JOIN ? Ума не приложу как это сделать. Отчегото кажется что JOIN не должен зависать.
Изменено: Troglodit - 19.09.2017 13:30:59
 
Код
SELECT DISTINCT * FROM T1 
INNER JOIN T2 ON T1.KOD = T2.KOD AND T1.Date = MAX(диапазон DateIn, где DateIn <=Date 'тут сами разбирайтесь')
WHERE T1.KOD = T2.KOD
Наверное так.
А вообще с такими вопросами вам надо на спец.форум по SQL, там быстрее смогут помочь.
 
Доброе время суток.
Цитата
Troglodit написал:
Отчегото кажется что JOIN не должен зависать.
Если у вас нет индексов по KOD и DateIn, ваша конструкция будет долгой. Лучше так
Код
Select T1.*, T2.sGroup As GroupName
From 
(T2
    Inner Join
    (Select KOD, Max(DateIn) As LastDate From T2 Group By KOD) TG
    On (T2.KOD = TG.KOD And T2.DateIn = TG.LastDate)
) Inner Join T1
On (T2.KOD = T1.KOD)
В случае отсутствия индексов Access автоматически создаст временные (всё же рассчитан на начинающих). Но, лучше их создать и настроить.
Успехов.
Страницы: 1
Читают тему
Наверх