запрос (возможно циклический) с подсчетом среднего

matlab
Дата: 05.01.2012 12:16:05
Добрый день. у меня такой вопрос, почитал по циклическим запросам, но ответа не нашел, может куда еще смотреть нужно, подскажите плиз. есть таблица table1, первый столбец Код, второй curdate, третий numbers; вторая таблица table2 (Код, resdate, avnumbers). в первую таблицу вносятся данные на ежедневной основе (даты, разные числа). необходимо запросом добавить данные во вторую таблицу с условием:

я задаю в форме в обычных полях две даты начальная и конечная
запрос должен найти первую дату в table1 и посчитать среднее значение чисел столбца numbers с глубиной в 7 дней назад от данной первой даты, затем добавить первую дату и среднее число в table2
запрос должен найти вторую дату и точно так же как и выше
запрос должен выполнять до тех пор пока не будет достигнута конечная заданная дата.

например я забью с 01.10.11 по 31.10.11 и должен в table2 получить 31 строку с усредненными данными в avnumbers.

заранее благодарствую
mds_world
Дата: 05.01.2012 13:07:29
select t.curdate, 
   davg("numbers","table1","curdate between " & format(t.curdate-7,"\#mm\/dd\/yyyy\#") & " and " & format(t.curdate,"\#mm\/dd\/yyyy\#")) as d
from table1 as t
where t.curdate between forms!Даты![Начальная дата] and forms!Даты![Конечная дата]
group by t.curdate
mds_world
Дата: 05.01.2012 14:20:03
Ах, да, вы же хотите получить запрос за все дни, независимо от наличия даты в таблице. Не осознал, когда отвечал. Это надо привлекать запрос Digits (автор Bonim) и лефтджойнить его с таблицей. Запрос Digits легко находится поиском по форуму.
mds_world
Дата: 05.01.2012 14:30:20
Попробуйте такой вариант
select 
   format(q.n + forms!Даты![Начальная дата], "dd.mm.yyyy") as Дата, q.n + forms!Даты![Начальная дата] as w, 
   davg("numbers","table1", "curdate between " & format(w-7,"\#mm\/dd\/yyyy\#") & " and " & format(w,"\#mm\/dd\/yyyy\#")) as d
from 
   table1 as t, 
   (select (D1.digit & D0.digit)+1 AS n from Digits AS D0, Digits AS D1) q,
   q left join t on q.n + forms!Даты![Начальная дата]=t.curdate
where q.n + forms!Даты![Начальная дата] between forms!Даты![Начальная дата] and forms!Даты![Конечная дата]
group by q.n
matlab
Дата: 05.01.2012 14:46:41
mds_world,

спасибо огромное, работает как нужно.
matlab
Дата: 05.01.2012 18:24:40
matlab,

а не подскажете как в условие функции DAvg по датам:
"curdate between " & format(t.curdate-7,"\#mm\/dd\/yyyy\#") & " and " & format(t.curdate,"\#mm\/dd\/yyyy\#")

добавить еще одно условие, например по новому столбцу "человек" чтобы отбирал имя Николай. не могу понять как этот and добавить, т.к. ругается на неправильность формулы.
Программист-Любитель
Дата: 05.01.2012 18:59:38
"curdate between " & format(t.curdate-7,"\#mm\/dd\/yyyy\#") & " and " & format(t.curdate,"\#mm\/dd\/yyyy\#") & " and sPersonName='" & sNikolay & "'"

JET SQL F1
matlab
Дата: 06.01.2012 14:47:17
Программист-Любитель,

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

а еще можно спросить, что нужно дописать, чтобы например при задании в ячейке формы слова ВСЕ, выводились результаты и с Николаем и с Михаилом и т.д.

может дадите ссылку где можно почитать о присвоении знаков " ' & %, так чтоб толково, а то логику понять не могу.

заранее благодарю
mds_world
Дата: 06.01.2012 18:05:52
matlab
а еще можно спросить, что нужно дописать, чтобы например при задании в ячейке формы слова ВСЕ, выводились результаты и с Николаем и с Михаилом и т.д.

В таких случаях лучше сделать комбобокс. Чем писать полный титул, проще выбирать из списка. В рекордсурсе комбо использовать запрос с юнионом, чтобы соединить два блока - один на "Все", второй на значения из таблицы


matlab
может дадите ссылку где можно почитать о присвоении знаков " ' & %, так чтоб толково, а то логику понять не могу.

Общая ссылка на ФАКи по MS ACCESS http://www.sql.ru/faq/faq.aspx?id=30000
Очень желательно прочитать все.
matlab
Дата: 27.01.2012 19:44:07
[quot mds_world]
matlab
а еще можно спросить, что нужно дописать, чтобы например при задании в ячейке формы слова ВСЕ, выводились результаты и с Николаем и с Михаилом и т.д.

В таких случаях лучше сделать комбобокс. Чем писать полный титул, проще выбирать из списка. В рекордсурсе комбо использовать запрос с юнионом, чтобы соединить два блока - один на "Все", второй на значения из таблицы


по поводу двух блоков, два соединенных запроса выводят в комбобоксе значения имен и слово ВСЕ, но запрос работает только с выбранными именами, а с опцией ВСЕ дает пустой результат.

sql комбобокса:

SELECT Отдел.Имя FROM Отдел
UNION
select 'ВСЕ' from Отдел;

подскажите что не так, уже голову сломал.