|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
Имеется таблица Таблица1: Событие Дата рТ рССобытие1 01.01.2016 "" ""Событие1 05.01.2016 4 4Событие2 06.01.2016 "" ""Событие1 07.01.2016 2 3 Где рТ - Текущая разница с последней датой для данного события, дней рС - средняя разница по всем рТ не равным ""(необязательное условие, можно и ноль добавить, правда среднее для второго события сократится вдвое, но на дистанции выравняется) для данного события, дней При добавлении новой записи, нужно посчитать разницу с последней(наибольшей) датой для данного события - записать полученное значение в рТ и посчитать среднее для всех рТ по добавляемому событию и записать значение в рС. Подскажите где ошибка?: Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 13:05 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
Небольшое уточнение: Событие - текстовый, Дата - Дата\Время, рС и рТ - Числовые. Двойными кавычками я пытался изобразить пустое поле) но можно заменить нулем. Работа программы будет выглядеть следующим образом. На форме есть поля для добавления записей. Программа при старте должна делать прогноз - то есть, по прошествии с события дней больше чем рС, делать уведомление. Если не делать запись значений рС, рТ в бд, то должно получится что-то типо такого: Код: vbnet 1.
Сложность, для меня, в задании параметров для DateDiff. Буду рад любой помощи. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 14:59 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
iddqd_win, Вычисления в таблицах - неправильно. рТ и рС-есть излишествующие данные Вычисления проводятся в запросах (с параметрами-в данном случае, [введите дату] на которую хотите получить данные, это параметр) как-то так: Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 15:00 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 15:23 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
iddqd_winпо всем рТ не равным ""В результате чего рТ = "" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 15:34 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
__Michelle, При добавлении в таблицу рТ будет равняться 0 дней. Не хотел ставить 0 потому что при второй дате, скажем с интервалом 10 дней, среднее значение будет равно 5, хотя по факту 10. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 15:38 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
iddqd_win, А, не учла "разница с последней датой для данного события", брала с текущей датой. Вместо Date() в запросе нужно ввести определение этой последней даты. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 15:43 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
__Michelleiddqd_win, А, не учла "разница с последней датой для данного события", брала с текущей датой. Вместо Date() в запросе нужно ввести определение этой последней даты. В какой строке? И давайте пройдемся вместе по коду, чтобы я не тупо переписал, а понял что к чему) код в вб уже: Код: vbnet 1. 2. 3. 4. 5.
Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 17:24 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
Если в такой форме, выдает ошибку: Ошибка синтаксиса (пропущен оператор) в выражении запроса 'Q.AvgAvgFROM Таблица1 INNER JOINSELECT PDKey'. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 17:42 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
iddqd_winОшибка синтаксиса (пропущен оператор) в выражении запроса 'Q.AvgAvgFROM Таблица1 INNER JOINSELECT PDKey'. Во всех строках не хватает пробелов между частями выражения. И они сливаются в непонятное для компилятора запросов. Поставьте пробелы в конце или начале строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 17:54 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
Пробелы забыл) Теперь так: Ошибка синтаксиса в предложении FROM ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 17:55 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
iddqd_win__Michelleiddqd_win, А, не учла "разница с последней датой для данного события", брала с текущей датой. Вместо Date() в запросе нужно ввести определение этой последней даты. В какой строке?Простите, отвлекли.))) Сейчас попробую показать... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 18:24 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
iddqd_winЕсли в такой форме, выдает ошибку: Ошибка синтаксиса (пропущен оператор) в выражении запроса 'Q.AvgAvgFROM Таблица1 INNER JOINSELECT PDKey'. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
перед SELECT PDKey скобки не хватает ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 18:47 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7.
Ну вот, наскоро, надеюсь, без ошибок. Здесь буква "T" - алиасное имя таблицы Таблица1 - латинская. Попробуйте выполнить как запрос из окна БД. Если результат будет похож на ожидаемый, тогда посмотрим, что дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 18:51 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
__Michelle, Если выполнять запрос в Access то просит ввести T.Событие. Если ввожу Событие1 то выводит следующее Событие Дата DD AvgAvgСобытие1 27.02.2016 6 4Событие1 25.02.2016 8 4Событие2 27.02.2016 6 4Событие2 23.02.2016 10 4 Исходная таблица выглядит так Событие Дата Событие1 25.02.2016 Событие1 27.02.2016 Событие1 29.02.2016 Событие1 02.03.2016 Событие1 04.03.2016 Событие2 23.02.2016 Событие2 27.02.2016 Событие2 03.03.2016 Событие2 06.03.2016 То есть что то не так) Да и ввод Т.События меня настораживает) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 20:06 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
iddqd_win, Да, не должно ничего требовать. Вот, попробуйте, пожалуйста. Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 20:47 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
__Michelle, Ни чего вводить не просит) Событие Дата DD AvgAvgСобытие1 27.02.2016 6 4Событие1 25.02.2016 8 4Событие2 27.02.2016 8 575Событие2 23.02.2016 12 575 Но не то) Здесь DD взято от максимального события, а не от сегодня - это я подправил. Событие Дата DD AvgAvgСобытие1 02.03.2016 6 4Событие1 29.02.2016 8 4Событие1 27.02.2016 10 4Событие1 25.02.2016 12 4Событие2 27.02.2016 10 575Событие2 23.02.2016 14 575 А вот средняя не правильно считается. Как я понимаю, тут главное правильно составить алгоритм определения предыдущей даты? Что-то типа дата для события1 которая меньше даты события1 искомой и если их несколько то максимальная из дат и все это загнать сначала в DateDiff а потом в Avg. И нужно еще исключить повторения, то есть надо вывести максимальное для события попадающего под условия. Заранее спасибо за оказанную помощь. Ну и пользуясь случаем, с 8 марта Вас!) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2016, 09:32 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
iddqd_win, Спасибо за поздравление! Очень приятно! Все-таки, "рТ - Текущая разница с последней датой для данного события" ( 18905198 ), или "с сегодняшней датой" ( 18907641 )? Если "с сегодняшней датой", то вот результат в табличке, подходит? Пока для наглядности выводятся все строки и добавлен столбец Res.Событие Дата DD AvgAvg ResСобытие1 25.02.2016 12 8 >Событие1 27.02.201610 8 >Событие1 29.02.2016 8 8 =Событие1 02.03.2016 6 8 <Событие1 04.03.2016 4 8 <Событие2 23.02.2016 14 7.75 >Событие2 27.02.2016 10 7.75 >Событие2 03.03.2016 5 7.75 <Событие2 06.03.2016 2 7.75 < ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2016, 13:01 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
__Michelle, Да рТ с сегодня разница, то есть пока событие не произошло еще раз, рС между событиями, средняя переодичность. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 08:00 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
iddqd_win, То есть, "последняя дата" это не "максимальная для события", а "предыдущая относительно данной даты события"? Тогда вариант: Запрос 1. Определяем интервалы между датами события. Код: sql 1. 2. 3. 4.
РезультатСобытие Дата DDСобытие1 25.02.2016 Событие1 27.02.2016 2Событие1 29.02.2016 2Событие1 02.03.2016 2Событие1 04.03.2016 2Событие2 23.02.2016 Событие2 27.02.2016 4Событие2 03.03.2016 5Событие2 06.03.2016 3Запрос 2. Определяем среднее значение интервала для каждого события. Код: sql 1. 2. 3.
РезультатСобытие AvgAvgСобытие1 2Событие2 4Запрос 3. Искомый результат. Выбираем записи с интервалами выше среднего для события. Код: sql 1. 2. 3.
РезультатСобытие Дата DD AvgAvgСобытие2 03.03.2016 5 4 Ну как, подходит?))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 09:39 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
Идеально) Огромное Вам спасибо!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 11:46 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
))). Оказалось, самое трудное - правильно понять (или сформулировать?) задачу.))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 12:22 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
__Michelle, Поторопился маленько)) Забыли самое главное)) ввел еще один запрос(рТН) для определения DateDiff с события до сегодня Код: plsql 1. 2. 3.
И теперь последний запрос Код: plsql 1. 2. 3.
И теперь не могу сгруппировать чтобы только самое последнее отображалось ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 21:04 |
|
VB2010е, Access, Запрос к БД
|
|||
---|---|---|---|
#18+
__Michelle, То есть чтобы получилось примерно следующее: Событие ПоследняяДата ТекущаяРазница СредняяРазница ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 21:10 |
|
|
start [/forum/topic.php?fid=45&msg=39187202&tid=1613798]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 151ms |
0 / 0 |