powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ошибка в запросе и очень долгое время исполнения
25 сообщений из 25, страница 1 из 1
ошибка в запросе и очень долгое время исполнения
    #39906780
pevec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал следующий запрос:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT  history.[text], Min(DateAdd("s",history.date,25569)) AS mindate, Max(DateAdd("s",history.date,25569)) AS maxdate, COUNT(history.[text]) AS qty
FROM history 
LEFT JOIN exel 
ON exel.[num1] = history.[text] OR exel.[num2] = history.[text]
WHERE ((exel.[num1] IS NULL) OR (exel.[num2] IS NULL))
GROUP BY exel.num1, exel.num2, history.[text]
ORDER BY COUNT(history.[text]) DESC


Запрос в Access выполняется, только я уже жду сутки, он пока не закончил выполнения,
но в конструктор зайти не могу, потому что ему не нравится следующее объединение
Код: plsql
1.
exel.[num1] = history.[text] OR exel.[num2] = history.[text]


если OR убрать, то перестает ругаться, но мне нужно по обоим полям искать.
Таблица history = 2000000 записей, exel = 35000.

Как получить результат?
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39906783
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
Min(DateAdd("s",history.date,25569)) AS mindate


эквивалентно
Код: sql
1.
DateAdd("s",Min(history.date),25569) AS mindate



Код: sql
1.
ON exel.[num1] = history.[text] OR exel.[num2] = history.[text]


эквивалентно
Код: sql
1.
ON history.[text] IN (exel.[num1], exel.[num2])



Код: sql
1.
GROUP BY exel.num1, exel.num2, history.[text]


с учётом условий связывания и отбора в этой конструкции вообще не видно смысла.

pevec1
мне нужно по обоим полям искать.

UNION
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39906787
pevec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал вместо or сделать in ,
пишет ошибка - отсутствует оператор, какой?
Что такое union?
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39906790
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pevec1
Как получить результат?


надо бы потренироваться на кошечках...
сделай копию бд в которой оставь не более 200 и 100 записей соответственно, отладь запрос,
а потом уже можно и ждать результат, а не с моря погоды...
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39906792
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pevec1

...Запрос в Access выполняется, только я уже жду сутки, он пока не закончил выполнения,
но в конструктор зайти не могу, потому что ему не нравится следующее объединение...
Сильно сомневаюсь что это так-скорее ему не нравится схема БД-хотелось бы на нее взглянуть с кратким описанием задачи,которую Вы решаете(какие данные храните и что хотите получить на выходе. Тип полей exel.[num1], history.[text], exel.[num2], history.[text])
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39906793
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и history.[text]-имя поля настораживает
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39906794
pevec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag
pevec1
Как получить результат?


надо бы потренироваться на кошечках...
сделай копию бд в которой оставь не более 200 и 100 записей соответственно, отладь запрос,
а потом уже можно и ждать результат, а не с моря погоды...


Я по разному пробовал, кучу сайтов перерыл.
в первом посте запрос работает только когда ставлю вот сюда:
Код: plsql
1.
WHERE ((exel.[num1] IS NULL) OR (exel.[num2] IS NULL))


следующее
Код: plsql
1.
 AND history.[id] BETWEEN 1 AND 100


то запрос подумав немного выдает результат.
Вот я и думаю, ждать мне результат от Access, или запрос переделывать?
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39906797
pevec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Есть три ящика с шарами, в большом ящике history лежат красный и синий шары,
надо выбрать так из двух маленьких ящиков шары, чтобы красных и синих там не было, в большом были
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39906798
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
скорее ему не нравится схема БД-хотелось бы на нее взглянуть


нету схемы, тупо две таблицы на пару лямов записей...
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39906799
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pevec1
Есть три ящика с шарами, в большом ящике history лежат красный и синий шары,
надо выбрать так из двух маленьких ящиков шары, чтобы красных и синих там не было, в большом были


вот и сделай запрос на этом примере, отладь...
а не пытайся искать шары в товарняке с сотней вагонов груженных под завязку разноцветными шарами
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39906800
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это имя тоже history.date
Код: vbnet
1.
2.
?cdate(25569)
01.01.1970 

DateAdd("s",history.date,25569)-Вы читали HELP про функцию-в поле history.date у Вас число? и дату Вы тоже представляете числом?
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39906884
Попробуйте так:
Код: plsql
1.
2.
3.
4.
SELECT  history.[text], DateAdd("s",Min(history.[date]),25569) AS mindate, DateAdd("s",Max(history.[date]),25569) AS maxdate, COUNT(history.[text]) AS qty
FROM history WHERE NOT EXISTS (SELECT * FROM exel WHERE exel.[num1] = history.[text] OR exel.[num2] = history.[text])
GROUP BY history.[text]
ORDER BY COUNT(history.[text]) DESC
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39906924
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ведь не от безделья задавался вопрос о типе полей, схеме данных и о том какой результат надо получить(который успешно проигнорирован ТСом),да и какой смысл у этого выражения:
DateAdd("s",Min(history.[date]),25569)
А в HELP так: DateAdd(Interval, Number, Date)
Number
Обязательный аргумент - числовое выражение, указывающее число добавляемых временных интервалов. Может быть положительным(для получения более поздних дат) и отрицательным(для получения более ранних дат). Если Number дробное число, то дробная часть отбрасывается(не округляется) системой
может все-таки DATEDIFF?
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39907123
pevec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Завершился запрос спустя полтора дня, с результатом в 700000 с лишним строк.
я сделал экспорт в excel с ограничением в 65535 строк, а как сохранить всю таблицу?
Почему он мне выдает ошибку при переходе в конструктор
из-за этой строчки:
Код: vbnet
1.
ON exel.[num1] = history.[text] OR exel.[num2] = history.[text]


или
Код: vbnet
1.
ON history.[text] IN (exel.[num1], exel.[num2])


???
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39907135
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pevec1 , сделайте следующее.

Возьмите базу. Сделайте её копию. Удалите оттуда всё, кроме указанных 2 таблиц. Удалите из них данные, оставив сотню записей в первой таблице и десяток-другой во второй, причём чтобы некоторые (но не все) пары записей охватывали все возможные комбинации сочетаний истинности условий из WHERE и ON. Сожмите базу. Заархивируйте в ZIP. Приложите к сообщению.
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39907142
pevec1

Почему он мне выдает ошибку при переходе в конструктор
из-за этой строчки:
Код: vbnet
1.
ON exel.[num1] = history.[text] OR exel.[num2] = history.[text]


или
Код: vbnet
1.
ON history.[text] IN (exel.[num1], exel.[num2])

Потому что конструктор не понимает этот высший пилотаж. Его предел возможностей - связь по нескольким полям, но в SQL выражении это пара полей И другая пара полей И т.д..

pevec1

Завершился запрос с результатом в 700000 с лишним строк.
я сделал экспорт в excel с ограничением в 65535 строк, а как сохранить всю таблицу?
Как вы делали экспорт. Какая версия Ёкселя?
pevec1

Завершился запрос спустя полтора дня
Вы мой вариант не пробовали (с учетом уточнения sdku по DateAdd)?
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39907144
pevec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий
Попробуйте так:
Код: plsql
1.
2.
3.
4.
SELECT  history.[text], DateAdd("s",Min(history.[date]),25569) AS mindate, DateAdd("s",Max(history.[date]),25569) AS maxdate, COUNT(history.[text]) AS qty
FROM history WHERE NOT EXISTS (SELECT * FROM exel WHERE exel.[num1] = history.[text] OR exel.[num2] = history.[text])
GROUP BY history.[text]
ORDER BY COUNT(history.[text]) DESC



Спасибо за совет, здесь не выдает ошибок, ждал пока база мой запрос закончит,
сейчас поставлю Ваш на исполнение. Отпишусь.
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39907145
pevec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий,

Экспорт - правый щелчок по запросу
у меня office 365
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39907152
pevec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Извините, я не понимаю, о чем Вы говорите. В чем моя ошибка?
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39907179
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
DateAdd("s",Min(history.[date]),25569)

Kаков тип поля history.[date](history.text и excel.num1,num2 вопрошаю уже третий раз)-если это дата, то Min(history.[date]) вернет дату,которая будет аргументом ф-ции DateAdd,который должен быть числом,а не датой
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39907183
pevec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

тип integer, дату он мне нормально выдает
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39907187
pevec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
остальные - короткий текст
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39907198
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pevec1
sdku,
тип integer, дату он мне нормально выдает
-дата в поле INTEGER???????
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39907202
pevec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

Да вот почитайте

www.epochconverter.com
...
Рейтинг: 0 / 0
ошибка в запросе и очень долгое время исполнения
    #39907651
pevec1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кривцов Анатолий
Попробуйте так:
Код: plsql
1.
2.
3.
4.
SELECT  history.[text], DateAdd("s",Min(history.[date]),25569) AS mindate, DateAdd("s",Max(history.[date]),25569) AS maxdate, COUNT(history.[text]) AS qty
FROM history WHERE NOT EXISTS (SELECT * FROM exel WHERE exel.[num1] = history.[text] OR exel.[num2] = history.[text])
GROUP BY history.[text]
ORDER BY COUNT(history.[text]) DESC


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


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