Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос по дате Access 2010 / 2 сообщений из 2, страница 1 из 1
18.06.2016, 11:42
    #39258220
nnaaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос по дате Access 2010
Есть таблица Table (3 поля: Field,Number, Data), в которой данные поступают нарастающим итогом, т.е. по полю Field каждое новое значение и дата должны быть больше предыдущего.
При запуске базы данных открывается форма Form1, в которой есть 2 поля для ввода даты начала периода и конца периода и 2 кнопки. Кнопка «Запрос Query по всем записям таблицы» просто выводит запрос Query. Кнопка «Запрос Query1 по дате» открывает запрос Query1.
Запрос Query:
Код: sql
1.
2.
3.
SELECT П1.Code, П1.Field, П1.Number, П1.Data, [П1].[Number]-(select П3.Number from [Table] as П3                                                          where П3.Field = П1.Field                                                            and П3.Data = (select Max(Data)                                                                           from [Table] as П2                                                                           where П2.Field = П1.Field and П1.Data > П2.Data)) AS Difference
FROM [Table] AS П1
ORDER BY П1.Data;


Суть запроса Query в том, что добавляется поле Difference, которое вычисляет значение по полю Field как разница между предыдущим Number и текущим Number. Например, Field f3: была дата 02.02.1990 со значением 3, следующая дата 05.02.1990 со значением 19, поле разница будет вычислено как 19 – 3 = 16.
Запрос Query1 (выбирает данные не из таблицы Table, а из запроса Prom):
Код: sql
1.
2.
3.
SELECT П1.Code, П1.Field, П1.Number, П1.Data, [П1].[Number]-(select П3.Number from [Prom] as П3                                                          where П3.Field = П1.Field                                                            and П3.Data = (select Max(Data)                                                                           from [Prom] as П2                                                                           where П2.Field = П1.Field and П1.Data > П2.Data)) AS Difference
FROM Prom AS П1
ORDER BY П1.Data;


Промежуточный запрос Prom (для считывания даты начала и даты конца с полей формы Form1):
Код: sql
1.
2.
3.
4.
SELECT Table.Code, Table.Field, Table.Number, Table.Data, Table.Difference
FROM [Table]
WHERE (((Table.Data)>=[Forms]![Form1]![FF1] And (Table.Data)<=[Forms]![Form1]![FF2]))
ORDER BY Table.Data;


Таким образом, разница между запросом Query и запросом Query1 в том, что запрос Query1 делает выборку по дате. Проблема в том, что запрос Query1 работает неправильно.
Например, в запросе Query по полю Field и дате 07.05.1990 поле Difference вычисляется как (15-10 = 5), а в запросе Query1 поле Difference = 0 (запрос не видит предыдущее значение).
Помогите, пожалуйста, переписать запрос так, чтобы перед выполнением запроса Query1 можно было выбирать временной период по дате.
...
Рейтинг: 0 / 0
19.06.2016, 06:06
    #39258367
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос по дате Access 2010
если правильно понял и еще актуально как-то так:
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос по дате Access 2010 / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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