Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Зависает SQL-запрос содержащий вложенный зависимый запрос  [new]
непоймучка
Guest
igor.kovalchuk
непоймучка,

Попробовал. Зависает : (

Ну если записей много, то да, там ведь идет частичное перемножение таблиц.

Как вариант, можно делать через промежуточную/временную таблицу,
для этого в исходной таблице temp нужен Код (код записи - уникальный/счетчик)

Сначала создать времянку (temp1), записав туда результаты max-подзапроса:
SELECT
 T.Код,
 (SELECT Max(T0.Год_вхождения) FROM firms T0 WHERE T0.KD=T.KD and T0.Год_вхождения<=T.sYear) AS Год
INTO temp1
FROM temp AS T

А потом уже делать итоговую выборку через эту времянку:
SELECT T.*, S.Группа
FROM
(SELECT T.*, T1.Год FROM temp AS T INNER JOIN temp1 AS T1 ON T.Код=T1.Код) AS T
LEFT JOIN firms AS S ON (T.KD=S.KD) AND (T.Год=S.Год_вхождения)

Чтобы все шевелилось побыстрее, делать это лучше в таблицах MSAccess,
имея там индексы по полям KD(типа LONG) и sYear/Год_вхождения.
21 сен 17, 09:16    [20810949]     Ответить | Цитировать Сообщить модератору
 Re: Зависает SQL-запрос содержащий вложенный зависимый запрос  [new]
igor.kovalchuk
Member

Откуда:
Сообщений: 17
непоймучка,

вся проблема в том, что Accessa на рабочем месте нету. Отчего-то компания офис без него только разрешила юзать.

А времянка поможет ?

я почему делаю под запрос, потому что поле sYear меняет свое значение и под него каждый раз нужно вычислять поле Группа так как поле kd в таблице firms не уникально из-за того что могут быть записи с одним kd но разными Год_вхождения.
21 сен 17, 21:09    [20813681]     Ответить | Цитировать Сообщить модератору
 Re: Зависает SQL-запрос содержащий вложенный зависимый запрос  [new]
непоймучка
Guest
igor.kovalchuk
непоймучка,

вся проблема в том, что Accessa на рабочем месте нету. Отчего-то компания офис без него только разрешила юзать.

А времянка поможет ?

я почему делаю под запрос, потому что поле sYear меняет свое значение и под него каждый раз нужно вычислять поле Группа так как поле kd в таблице firms не уникально из-за того что могут быть записи с одним kd но разными Год_вхождения.
Ну я протестил те запросы, что выше предлагал (в temp~200K записей, в firms~10K записей). Первый запрос на создание врем.таблицы работал ~50 сек, второй запрос на выборку - секунд 30 читает, попробуйте сами.
21 сен 17, 22:08    [20813861]     Ответить | Цитировать Сообщить модератору
 Re: Зависает SQL-запрос содержащий вложенный зависимый запрос  [new]
igor.kovalchuk
Member

Откуда:
Сообщений: 17
непоймучка,

спасибо.
ваш вариант еще не пробовал. завтра потестю.

сам пока родил такой, который наконец-то заработал на маленькой тестовой базе. завтра попробую на большой.

SELECT first(q1.KD) AS KD, first(Area) AS fArea, first(q1.sYear) AS fsYear, last(q1.Group) AS lGroup, max(q1.DateIn) AS m_DateIn
FROM (SELECT t1.*, t2.Group, t2.DateIn FROM temp AS t1 LEFT JOIN Firms AS t2 ON t1.KD = t2.KD ORDER BY DateIn)  AS q1
WHERE q1.sYear >= q1.DateIn
GROUP BY (CSTR(q1.kd) +"-"+ CSTR(q1.sYear))

UNION 

SELECT temp.KD, temp.Area, temp.sYear , 'other' as lGroup, '01.01.1900' as m_DateIn
FROM temp LEFT JOIN Firms ON temp.[KD] = Firms.[KD]
WHERE ((Firms.KD) Is Null);
22 сен 17, 00:00    [20814126]     Ответить | Цитировать Сообщить модератору
 Re: Зависает SQL-запрос содержащий вложенный зависимый запрос  [new]
Гость проходящий мимо
Guest
igor.kovalchuk,

попробуй OUTER APPLY
22 сен 17, 09:09    [20814425]     Ответить | Цитировать Сообщить модератору
 Re: Зависает SQL-запрос содержащий вложенный зависимый запрос  [new]
непоймучка
Guest
igor.kovalchuk
непоймучка,

вся проблема в том, что Accessa на рабочем месте нету. Отчего-то компания офис без него только разрешила юзать.

А времянка поможет ?

Это не проблема. Чтобы создать и обработать времянки в mdb-файле, сам MSAccess не нужен.
Можно все сделать в VBA Excel через объекты доступа к данным (тот же ADODB, который вы в своем коде используете).
22 сен 17, 11:02    [20814903]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Microsoft Access Ответить