-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


Запрос по дате Access 2010

Суббота, 18 Июня 2016 г. 11:42 + в цитатник
Есть таблица Table (3 поля: Field,Number, Data), в которой данные поступают нарастающим итогом, т.е. по полю Field каждое новое значение и дата должны быть больше предыдущего.
При запуске базы данных открывается форма Form1, в которой есть 2 поля для ввода даты начала периода и конца периода и 2 кнопки. Кнопка «Запрос Query по всем записям таблицы» просто выводит запрос Query. Кнопка «Запрос Query1 по дате» открывает запрос Query1.
Запрос Query:
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):
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):
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 можно было выбирать временной период по дате.

http://www.sql.ru/forum/1218781/zapros-po-date-access-2010


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку