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

Откуда:
Сообщений: 34
Коллеги, добрый день!
Прошу помочь с запросом( прилагаю схему данных):
Есть запрос, который выводит предыдущую дату визита сотрудника в магазин в отдельном столбце рядом со столбцом даты визита
 
SELECT e.Shop_code,e.Visits_date,e2.LVisits_date
FROM  Visits e
left join (select Shop_code,Max(e.Visits_date) LVisits_date
from Visits
where Visits_date<=e.Visits_date
Group by Shop_code) e2
on e.Shop_code = e2.Shop_code


Запрос в MS Access выводит ошибку: Ошибка синтаксиса(пропущен оператор) в выражении запроса Max(e.Visits_date) LVisits_date

2)В строке
 where Visits_date<=e.Visits_date
-
ошибка, не знаю как правильно написать условие для вывода предыдущей даты.
30 сен 21, 16:22    [22377998]     Ответить | Цитировать Сообщить модератору
 Re: Помочь с запросом  [new]
aleks222
Member

Откуда:
Сообщений: 1839
SELECT e.Shop_code,e.Visits_date, (select Max(e.Visits_date) from Visits where Visits_date<=e.Visits_date) as LVisits_date
FROM  Visits e
30 сен 21, 17:12    [22378036]     Ответить | Цитировать Сообщить модератору
 Re: Помочь с запросом  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
Guest1985,
можно используя предикат TOP:
SELECT TOP 1 * FROM tbl WHERE ваше условие ORDER BY полеСдатой DESC 
Это общий пример,но судя по тому что Вы написали возникают вопросы по схеме данных-хотелось бы на нее взглянуть

Сообщение было отредактировано: 30 сен 21, 17:38
30 сен 21, 17:46    [22378047]     Ответить | Цитировать Сообщить модератору
 Re: Помочь с запросом  [new]
Guest1985
Member

Откуда:
Сообщений: 34
aleks222,

к сожалению запрос не выводит предыдущую дату, выводит такую же дату в другой столбец.
Нужна именно дата предыдущая например:
Исходная таблица:

Employee_code Shop_code Visits_date production_quantity total_production_quantity
1 1 01.09.2021 10 20
2 1 03.09.2021 10 30
3 2 03.09.2021 5 14
2 3 08.09.2021 3 3
3 3 11.09.2021 5 10


Что должно получиться:


Employee_code Shop_code Visits_date Previous Visits_date production_quantity total_production_quantity
1 1 01.09.2021 Null 10 20
2 1 03.09.2021 01.09.2021 5 20
3 2 03.09.2021 03.09.2021 6 30
2 3 08.09.2021 03.09.2021 10 30
3 3 11.09.2021 08.09.2021 10 30



К сообщению приложен файл. Размер - 136Kb
30 сен 21, 18:02    [22378057]     Ответить | Цитировать Сообщить модератору
 Re: Помочь с запросом  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
Guest1985,
может так:

К сообщению приложен файл (tmp.rar - 16Kb) cкачать
30 сен 21, 19:10    [22378082]     Ответить | Цитировать Сообщить модератору
 Re: Помочь с запросом  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
ПыСы:если кодовое поле случайные значения(не счетчик)сортировать по полю Visits_date, а не ID
30 сен 21, 23:26    [22378144]     Ответить | Цитировать Сообщить модератору
 Re: Помочь с запросом  [new]
aleks222
Member

Откуда:
Сообщений: 1839
Guest1985
aleks222,

к сожалению запрос не выводит предыдущую дату, выводит такую же дату в другой столбец.
Нужна именно дата предыдущая например:


Вот они - истинные кнопкодавы.
- Мозг включить?
- Не, не знаем, что это такое.

SELECT e.Shop_code,e.Visits_date, (select Max(Visits_date) from Visits where Visits_date<e.Visits_date) as LVisits_date
FROM  Visits e


Сообщение было отредактировано: 1 окт 21, 08:15
1 окт 21, 08:24    [22378231]     Ответить | Цитировать Сообщить модератору
 Re: Помочь с запросом  [new]
Dadont
Member

Откуда:
Сообщений: 155
Guest1985
Коллеги, добрый день!
Прошу помочь с запросом( прилагаю схему данных):
Есть запрос, который выводит предыдущую дату визита сотрудника в магазин в отдельном столбце рядом со столбцом даты визита
 
SELECT e.Shop_code,e.Visits_date,e2.LVisits_date
FROM  Visits e
left join (select Shop_code,Max(e.Visits_date) LVisits_date
from Visits
where Visits_date<=e.Visits_date
Group by Shop_code) e2
on e.Shop_code = e2.Shop_code


Запрос в MS Access выводит ошибку: Ошибка синтаксиса(пропущен оператор) в выражении запроса Max(e.Visits_date) LVisits_date

2)В строке
 where Visits_date<=e.Visits_date
-
ошибка, не знаю как правильно написать условие для вывода предыдущей даты.


Вы хотите запрос по сотрудникам, а в условии Shop_code?
1 окт 21, 09:30    [22378253]     Ответить | Цитировать Сообщить модератору
 Re: Помочь с запросом  [new]
Dadont
Member

Откуда:
Сообщений: 155
Guest1985, и Ваш запрос выдает последнюю дату посещения а не предыдущую
SELECT e.Employee_code,e.Visits_date,e2.LVisits_date
FROM  Visits e
left join (select Employee_code,Max(e.Visits_date) LVisits_date
from Visits e
where Visits_date<=e.Visits_date
Group by Employee_code) e2
on e.Employee_code = e2.Employee_code 
1 окт 21, 09:33    [22378256]     Ответить | Цитировать Сообщить модератору
 Re: Помочь с запросом  [new]
Dadont
Member

Откуда:
Сообщений: 155
Если нужна дата предыдущего посещения, то вот
SELECT e.Employee_code, e.Visits_date, e2.Visits_date PVisits_date
FROM  Visits AS e LEFT JOIN Visits AS e2 ON e.Employee_code = e2.Employee_code AND e2.Visits_date<e.Visits_date


Сообщение было отредактировано: 1 окт 21, 10:33
1 окт 21, 10:41    [22378298]     Ответить | Цитировать Сообщить модератору
 Re: Помочь с запросом  [new]
Dadont
Member

Откуда:
Сообщений: 155
Или так
SELECT
Employee_code,
Visits_date,
LAG(Visits_date) OVER (PARTITION BY Employee_code) PVisits_date
FROM
Visits;
4 окт 21, 11:08    [22379056]     Ответить | Цитировать Сообщить модератору
 Re: Помочь с запросом  [new]
Dadont
Member

Откуда:
Сообщений: 155
Блин, в Аксесе нет оконных функций
тогда как-то так
SELECT Employee_code,
		Visits_date,
      (SELECT Top 1 e.Visits_date 
       FROM Visits e 
       WHERE e.Visits_date<Visits.Visits_date
       AND e.Employee_code=Visits.Employee_code 
       ORDER BY e.Visits_date DESC) AS PVisits_date
FROM Visits
4 окт 21, 12:15    [22379085]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить