|
вычисление между строками
|
|||
---|---|---|---|
#18+
добрый день всем. подскажите плз можно ли решить данную проблему: имеем: присоединенная(через odbc) таблица из sql, поля: tag(int), date(int) tag при присоединении назначается ключевым полем tag имеет неколько фиксированных значений, date меняется, табличка дописывается каждый час, нужно: вычислить и вывести цифру data(запись) - data(предыдущая запись) т.е типа почасовая выработка за сутки уже все мозги сломал как это реализовать.. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:26 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
Сделайте это на стороне сервера нормальным t-sql'ем, а готовый результат уже подлинкуйте как "таблицу" ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:35 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
П-Л, хм.. сорри а можно поподробнее(для немного бестолковых) как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 11:38 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
Открываете серверную студию. Пишете скрипт создания вью, делающего нужные вам вычисления. Отлаживате и добиваетесь его правильной работы. Готовый вью линкуете к базе аксеса. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 12:23 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
П-Л, к сожалению этого не смогу, а на стороне акцесса это как нибудь все таки можно сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 12:36 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
chester1310, елай что говорят. Это не трудно. Создай запрос типа Pass-Trough подключи его через odbc к серверу и напиши примерно следующий текст: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Где tbl - имя твоей таблицы Скрипт можно усовершенствовать, введя временную таблицу: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
diffdt - выработка между двумя записями в секундах. Ее еще надо будет перевести в необходимый формат. Но, это уже техника Возможны и другие варианты. ЗЫ По-видимому, здесь не хватает фильтров, так как запрос выведет все данные из таблицы. Поскольку, примене inner join, последние записи для каждого tag не будут выводиться ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 13:03 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
В догонку. В первом случае можно создать вью, как говорил П-Л , во втором, лучше создать процедуру. В первом случае можно с вью работать, как с таблицей, используя обычный линк к БД, во втором - тип запроса Pass-Trough. В любом случае никаких проблем нет ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 13:08 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
Rivkin Dmitrychester1310, елай что говорят. Это не трудно. Создай запрос типа Pass-Trough подключи его через odbc к серверу и напиши примерно следующий текст: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Где tbl - имя твоей таблицы это сделал, запросом в sql, работает, но выводит какие то непонятные цыфры, на секунды между записями непохоже... tag| StartDate| EndDate| diffdt 185| 9408| 7584| -157593600 разница между этими записями сутки ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 14:04 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
Rivkin DmitryВ догонку. В первом случае можно создать вью, как говорил П-Л , во втором, лучше создать процедуру. В первом случае можно с вью работать, как с таблицей, используя обычный линк к БД, во втором - тип запроса Pass-Trough. В любом случае никаких проблем нет сорри, а можно немного поподробнее... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 14:05 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
tag StartDate EndDate diffdt185 9408 7584 -157593600 Что-то у тебя с датами 9408 = 05/10/1925, а 7584 = 07/10/1920 Что, собственно пояснять? Как создать вью или процедуру? Или, как потом прилинковаться к серверу и прилинковать этот вью и запустить процедуру? Что? И как объяснять? Не лучше ли порыться в учебниках? А, впрочем, спрашивай. Только, конкретно ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 14:23 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
Rivkin DmitryЧто, собственно пояснять? Как создать вью или процедуру? Или, как потом прилинковаться к серверу и прилинковать этот вью и запустить процедуру? Что? И как объяснять? Можно короче - Ф1 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 14:36 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
Rivkin Dmitrytag StartDate EndDate diffdt185 9408 7584 -157593600 Что-то у тебя с датами 9408 = 05/10/1925, а 7584 = 07/10/1920 наверное я плохо объяснил... data(int) в нем просто числовые значения(показания датчиков, например весов), т.е есть отсчеты за 00, 01, 02....23 часы и нужно вычислить сколько прошло груза за час. Rivkin DmitryЧто, собственно пояснять? Как создать вью или процедуру? Или, как потом прилинковаться к серверу и прилинковать этот вью и запустить процедуру? Что? И как объяснять? Не лучше ли порыться в учебниках? А, впрочем, спрашивай. Только, конкретно вью это просто запрос? несложные запросы, процедуры пишу, прилинковаться к серверу могу, проблема с этим рассчетом... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 16:49 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
я сам не люблю просить все сделать за меня... перед тем как спрашивать стараюсь почитать как что и попробовать сам, но к сожалению осваиваю это сам, и литература не всегда помогает, да и уже не 20 лет так что за глуповатые вопросы не пинайте сильно плз ... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 16:58 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
Если поле названо date, то хочется думать, что оно содержит в себе календарную дату (неважно в каком формате) Извините меня, что я еще мог подумать? Сразу же после обхяснения ТС возникает вопрос, а в каком поле лежат эти самые отсечки 00, 01, 02....23 и вкаом поле находится реальная календарная дата? Короче, таблицу в студию. Если все правильно сделано, запрос можно будет еще больше упростить ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 17:37 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
Date - зарезервированное слово и в SQL и в VBA. Плохое название для поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 17:46 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
chester1310проблема с этим рассчетом... Нет здесь проблемы. Идея очень простая. Обращаемся к таблице 2 раза - делаем 2 одинаковых запроса. Запросы обязательно должны содержать ключевое поле (tag в нашем случае) и поле счетчика, вместо которого может выступать фиксированая дата (например 2013-01-30 08:00 и следующие за ней 2013-01-30 09:00б 2013-01-30 08:10 ...) Эти 2 запроса нужно соеденить друг с другом так, чтобы совпадали ключевые поля, а поля счетчика отличались на еденицу (важно, чтобы не было прорусков!!! Если такое возможно, придется делать свое поле счетчика, как я сделал в примере) И все ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 17:47 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
Rivkin DmitryЕсли поле названо date, то хочется думать, что оно содержит в себе календарную дату (неважно в каком формате) Извините меня, что я еще мог подумать? Сразу же после обхяснения ТС возникает вопрос, а в каком поле лежат эти самые отсечки 00, 01, 02....23 и вкаом поле находится реальная календарная дата? Короче, таблицу в студию. Если все правильно сделано, запрос можно будет еще больше упростить согласен, date это и можно обозначить и дату и данные, к сожалению такая досталась таблица, я привык... таблица: tag[int] date[int] time[time(0)] default (sysdatetime()) sdt[smalldatetime] default (sysdatetime()) таблица заполняется процедурой по расписанию, каждый час, данные в первые 2 поля беруться из другой таблички, выбираются 6 тэгов (в основной таблице их около 600), т.е каждый час прибавляется 6 строк, в которых 2 поля проставляются автоматом time и sdt используются как индикаторы времени записи и работы агента ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 18:03 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
chester1310, 1. Что-то я не понимаю: Только 6 тэгов за час из 600 означает, что повторяться тэги начнут приблизительно через 4 суток 600/6=100 часов. О какой почасовой выработке может идти речь? 2. Одно из полей явно избыточно time[time(0)] default (sysdatetime()) sdt[smalldatetime] default (sysdatetime()) 3. Английское date - означает только календарную дату и ничего больше. Данные, называются data 4. Если речь идет не о почасовой выработке, а о выработке между двумя последовательными записями по времени для одного и того же тэга, тогда уточню код запроса: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2013, 18:42 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
Rivkin Dmitry, запрос работает, сегодня-завтра погоняю, донастрою на текущую ситуацию, отпишу как что.. у меня к сожалению не хватает базовых знаний, чтобы такое написать.. подкрутить, прикрутить могу, а вот правильно составить такой уже нет... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2013, 10:08 |
|
вычисление между строками
|
|||
---|---|---|---|
#18+
Rivkin Dmitry, огромное спасибо!!!!! все работает, кое что подкрутил под себя, немного понял как это работает, лишние поля я вводил для упрощения последующей обработки, еще подкрутил доп таблицы через которые происходят подсчеты, получилось супер!! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2013, 12:28 |
|
|
start [/forum/topic.php?fid=45&msg=38131784&tid=1620685]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 271ms |
total: | 403ms |
0 / 0 |