Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Помогите написать запрос  [new]
Katy_2108
Member

Откуда:
Сообщений: 23
Есть таблица в Access, а в ней столбец с датами, но в формате текст, поэтому встречаются некорректные даты

SELECT CDate(Report_table.date_) AS Выражение1, Report_table.date_
FROM Report_table

некорректные даты вижу, но мне надо, чтобы запрос выводил только некорректные даты, помогите, пожалуйста
23 ноя 19, 17:35    [22023627]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
zimkon
Member

Откуда: guest_rusimport
Сообщений: 131
Katy_2108
Есть таблица в Access, а в ней столбец с датами, но в формате текст, поэтому встречаются некорректные даты

SELECT CDate(Report_table.date_) AS Выражение1, Report_table.date_
FROM Report_table

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

Попробуйте так
SELECT Report_table.date_
FROM Report_table where IsDate(Report_table.date_)=false
23 ноя 19, 18:20    [22023643]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Katy_2108
Member

Откуда:
Сообщений: 23
zimkon,
спасибо большое, получилось
23 ноя 19, 18:28    [22023647]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Djois
Member

Откуда: Минск
Сообщений: 20
Добрый день.
Помогите пожалуйста и мне написать запрос)

есть таблица:

Р1 Р2 Р3
9 txt7 txt8 Ф1
12 txt1 txt2 Ф1
11 txt3 txt4 Ф1
10 txt5 txt6 А1


Запрос должен вернуть строки:

Р1 Р2 Р3
12 txt1 txt2 Ф1
10 txt5 txt6 А1


т.е. одбросить дубли по полю P3, оставляя строки с максимальным №
2 дек 19, 14:51    [22030382]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19705
SELECT t1.*
FROM [table] AS t1
JOIN (SELECT [P3], MAX([]) AS []
      FROM [table]
      GROUP BY [P3]) AS t2
WHERE t1.[P3]= t2.[P3]
  AND t1.[]= t2.[]
2 дек 19, 15:12    [22030400]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Djois
Member

Откуда: Минск
Сообщений: 20
Пока решаю делать это так, но вдруг есть что-то более простое и надёжное)

Данные хранятся в таблице с именем - Лист1

SELECT Лист1.[№], Лист1.Р1, Лист1.Р2, Лист1.Р3
FROM Лист1
WHERE (DMax("[№]","[Лист1]","[Р3]=" & "'" & [Р3] & "'")-[№])=0;


Сообщение было отредактировано: 2 дек 19, 15:23
2 дек 19, 15:14    [22030405]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19705
Djois
Пока решаю делать это так
Это будет по подзапросу на каждую запись - о производительности забудь. Но если устраивает - да и хрен бы с им...
2 дек 19, 15:51    [22030441]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
zimkon
Member

Откуда: guest_rusimport
Сообщений: 131
Akina
SELECT t1.*
FROM [table] AS t1
JOIN (SELECT [P3], MAX([]) AS []
      FROM [table]
      GROUP BY [P3]) AS t2
WHERE t1.[P3]= t2.[P3]
  AND t1.[]= t2.[]

возможна ошибка систаксиса в запросе Access (если это не какой-то другой диалект)
SELECT t1.*
FROM [table] AS t1 INNER JOIN (SELECT [P3], MAX([]) AS []
      FROM [table]
      GROUP BY [P3]) AS t2 ON (t1.[]= t2.[]) AND (t1.[P3]= t2.[P3]);
2 дек 19, 17:31    [22030545]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6380
Katy_2108
Есть таблица в Access, а в ней столбец с датами, но в формате текст...
На будущее: поле с датами ДОЛЖНО иметь тип дата/время-некорректная дата не "проглотится" и в тбл.не попадет
2 дек 19, 18:50    [22030635]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Djois
Member

Откуда: Минск
Сообщений: 20
zimkon
Akina
SELECT t1.*
FROM [table] AS t1
JOIN (SELECT [P3], MAX([]) AS []
      FROM [table]
      GROUP BY [P3]) AS t2
WHERE t1.[P3]= t2.[P3]
  AND t1.[]= t2.[]

возможна ошибка систаксиса в запросе Access (если это не какой-то другой диалект)
SELECT t1.*
FROM [table] AS t1 INNER JOIN (SELECT [P3], MAX([]) AS []
      FROM [table]
      GROUP BY [P3]) AS t2 ON (t1.[]= t2.[]) AND (t1.[P3]= t2.[P3]);


Да, первый запрос выдаёт ошибку синтаксиса, а второй ругается на циклическую ссылку ((
Access 2010

Пока пользуюсь этим,
SELECT table.*
FROM [table]
WHERE ((((DMax("[]","[table]","[Р3]=" & "'" & [Р3] & "'")-[])=0)=0));


но как и говорил Akina это по подзапросу на каждую запись на больших данных долго отрабатывает

Сообщение было отредактировано: 3 дек 19, 11:16
3 дек 19, 11:06    [22031051]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Djois
Member

Откуда: Минск
Сообщений: 20
SELECT table.*
FROM [table]
WHERE ((DMax("[№]","[table]","[Р3]=" & "'" & [Р3] & "'")-[№]))=0;


*Djois,
3 дек 19, 11:19    [22031061]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Djois
Member

Откуда: Минск
Сообщений: 20
Djois
Добрый день.
Помогите пожалуйста и мне написать запрос)

есть таблица:

Р1 Р2 Р3
9 txt7 txt8 Ф1
12 txt1 txt2 Ф1
11 txt3 txt4 Ф1
10 txt5 txt6 А1


Запрос должен вернуть строки:

Р1 Р2 Р3
12 txt1 txt2 Ф1
10 txt5 txt6 А1


т.е. одбросить дубли по полю P3, оставляя строки с максимальным №

Сразу не сказал, а наверно это важно, поле № ключевое (счётчик)

SELECT table.*
FROM [table]
WHERE DMax("[]","[table]","[Р3]=" & "'" & [Р3] & "'")-[]=0;


DMax в этом случаи отрабатывает конечно быстрее... или нет?

Сообщение было отредактировано: 3 дек 19, 11:42
3 дек 19, 11:40    [22031083]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
zimkon
Member

Откуда: guest_rusimport
Сообщений: 131
Djois
zimkon
пропущено...

возможна ошибка систаксиса в запросе Access (если это не какой-то другой диалект)
SELECT t1.*
FROM [table] AS t1 INNER JOIN (SELECT [P3], MAX([]) AS []
      FROM [table]
      GROUP BY [P3]) AS t2 ON (t1.[]= t2.[]) AND (t1.[P3]= t2.[P3]);


Да, первый запрос выдаёт ошибку синтаксиса, а второй ругается на циклическую ссылку ((
Access 2010

Пока пользуюсь этим,
SELECT table.*
FROM [table]
WHERE ((((DMax("[]","[table]","[Р3]=" & "'" & [Р3] & "'")-[])=0)=0));


но как и говорил Akina это по подзапросу на каждую запись на больших данных долго отрабатывает

А так?
SELECT t1.*
FROM [table] AS t1 INNER JOIN (SELECT t3.[P3], MAX(t3.[]) AS N
      FROM [table] as t3
      GROUP BY t3.[P3]) AS t2 ON (t1.[]= t2.N) AND (t1.[P3]= t2.[P3]);
3 дек 19, 12:01    [22031091]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19705
Djois
первый запрос выдаёт ошибку синтаксиса
Ну это заморочки самого Аксесса - любит он лишнего навесить.

Если делать визардами, то получаются такие тексты (форматирование сохранено):

Подзапрос (name=subquery):
SELECT Max(table.[]) AS [Max-], table.P3
FROM [table]
GROUP BY table.P3;

Основной запрос (name=mainquery):
SELECT table.*
FROM [table] INNER JOIN subquery ON (table.P3 = subquery.P3) AND (table.[] = subquery.[Max-]);

Объединённый запрос (name=solidquery):
SELECT table.*
FROM [table] INNER JOIN (SELECT Max(table.[]) AS [Max-], table.P3
FROM [table]
GROUP BY table.P3) AS subquery ON (table.P3 = subquery.P3) AND (table.[] = subquery.[Max-]);

Все запросы - рабочие (проверено на модельных структуре и данных).
3 дек 19, 12:05    [22031094]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Djois
Member

Откуда: Минск
Сообщений: 20
zimkon

А так?
SELECT t1.*
FROM [table] AS t1 INNER JOIN (SELECT t3.[P3], MAX(t3.[]) AS N
      FROM [table] as t3
      GROUP BY t3.[P3]) AS t2 ON (t1.[]= t2.N) AND (t1.[P3]= t2.[P3]);


не работает, сначала требует ввести значениет параметров:
t3.P3
t1.P3

и если что-то в параметры вводить - выдаёт только одну строку, а д.б. их две

№ Р1 Р2 Р3
12 txt1 txt2 Ф1
3 дек 19, 12:06    [22031095]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
zimkon
Member

Откуда: guest_rusimport
Сообщений: 131
Djois,
возможно в запросе у P3 введена русская буква ЭР (или наоборот - латинская ПЭ) , а у вас в названии поля латинская (или наоборот - русская). Короче, надо чтобы было идентично и в запросе и в таблице
3 дек 19, 12:20    [22031110]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Djois
Member

Откуда: Минск
Сообщений: 20
Akina
Djois
первый запрос выдаёт ошибку синтаксиса
Ну это заморочки самого Аксесса - любит он лишнего навесить.

Если делать визардами, то получаются такие тексты (форматирование сохранено):

Подзапрос (name=subquery):
SELECT Max(table.[]) AS [Max-], table.P3
FROM [table]
GROUP BY table.P3;

Основной запрос (name=mainquery):
SELECT table.*
FROM [table] INNER JOIN subquery ON (table.P3 = subquery.P3) AND (table.[] = subquery.[Max-]);

Объединённый запрос (name=solidquery):
SELECT table.*
FROM [table] INNER JOIN (SELECT Max(table.[]) AS [Max-], table.P3
FROM [table]
GROUP BY table.P3) AS subquery ON (table.P3 = subquery.P3) AND (table.[] = subquery.[Max-]);

Все запросы - рабочие (проверено на модельных структуре и данных).


Скопировал эти три запроса с указанными именами.
Объединённый запрос (name=solidquery) при запуске просит ввести значение параметра table.P3
и в результате выдаёт только одну строку:
Р1 Р2 Р3
12 txt1 txt2 Ф1


а их д.б. две

Р1 Р2 Р3
12 txt1 txt2 Ф1
10 txt5 txt6 А1
3 дек 19, 12:25    [22031115]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Djois
Member

Откуда: Минск
Сообщений: 20
zimkon
Djois,
возможно в запросе у P3 введена русская буква ЭР (или наоборот - латинская ПЭ) , а у вас в названии поля латинская (или наоборот - русская). Короче, надо чтобы было идентично и в запросе и в таблице

ёлы палы точно проверю чуть позже отпишусь)))
3 дек 19, 12:26    [22031116]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4456
Поправлю...
zimkon
SELECT t1.*
FROM [table] AS t1 INNER JOIN (SELECT t3.[P3], MAX(t3.[]) AS N
      FROM [table] as t3
      GROUP BY t3.[P3]) AS t2 ON t1.[]= t2.N;
3 дек 19, 12:35    [22031125]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
Djois
Member

Откуда: Минск
Сообщений: 20
да всё работает, это я тупанул, спасибо!!!
3 дек 19, 12:59    [22031154]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать запрос  [new]
zimkon
Member

Откуда: guest_rusimport
Сообщений: 131
Панург
Поправлю...
zimkon
SELECT t1.*
FROM [table] AS t1 INNER JOIN (SELECT t3.[P3], MAX(t3.[]) AS N
      FROM [table] as t3
      GROUP BY t3.[P3]) AS t2 ON t1.[]= t2.N;


Ну, да, если поле номер не повторяется, как в приведенном ТС примере, но ведь это может быть и не так ( Но об этом знает только ТС)
3 дек 19, 13:55    [22031204]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить