Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / Заполнение столбца в таблице из результатов предыдущих столбцов / 25 сообщений из 34, страница 1 из 2
14.10.2009, 13:14
    #36250248
PaulS1986
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
Господа подскажите пожалуйста!
Есть таблица :

create table "informix".downtime
(
did serial not null ,
stop_time datetime year to second,
start_time datetime year to second,
uptime integer,
primary key (did) constraint "informix".pk_downtime
);
revoke all on "informix".downtime from "public" as "informix";

первые 2 столбца stop_time и start_time заполнены данными, как из значения в строке N в 1 столбце отнять значение N-1 во втором и записать результат в N-ную строку столбца uptime ???
...
Рейтинг: 0 / 0
14.10.2009, 13:27
    #36250286
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
PaulS1986
первые 2 столбца stop_time и start_time заполнены данными, как из значения в строке N в 1 столбце отнять значение N-1 во втором и записать результат в N-ную строку столбца uptime ???
В чём? В секундах?
Не поверишь - поиск по форуму по "разность дат" рулит :)

тынц
...
Рейтинг: 0 / 0
14.10.2009, 13:28
    #36250289
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
пардон, про разные строки провтыкал... минутку...
...
Рейтинг: 0 / 0
14.10.2009, 13:35
    #36250322
PaulS1986
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
Да можно и в секундах!
через select вывожу данные в одну строку, а как вычесть и вписать хз
...
Рейтинг: 0 / 0
14.10.2009, 13:37
    #36250334
Заполнение столбца в таблице из результатов предыдущих столбцов
TOP 1 подзапрос или чего там есть похожего в Infirmix-е.
...
Рейтинг: 0 / 0
14.10.2009, 13:40
    #36250346
Заполнение столбца в таблице из результатов предыдущих столбцов
Видимо, First 1-подзапрос нужно юзать... :)
...
Рейтинг: 0 / 0
14.10.2009, 13:50
    #36250379
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
Добрый Э - Эх,
нельзя first в подзапросах.


PaulS1986, Пример напишите, с содержимым таблицы, с желаемым результатом
...
Рейтинг: 0 / 0
14.10.2009, 14:02
    #36250426
TmpFile()
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select d1.did,  
        (select d2.start_time 
                          from downtime d2
                         where d2.did = (select max(did)
                                           from downtime
                                          where did <  d1.did)),  d1.stop_time ,  
        (select d2.start_time 
                          from downtime d2
                         where d2.did = (select max(did)
                                           from downtime
                                          where did <  d1.did)) - d1.stop_time    
  from downtime d1
...
Рейтинг: 0 / 0
14.10.2009, 14:03
    #36250428
Заполнение столбца в таблице из результатов предыдущих столбцов
Журавлев ДенисДобрый Э - Эх,
нельзя first в подзапросах.


PaulS1986, Пример напишите, с содержимым таблицы, с желаемым результатомА агрегированный подзапрос можно? Ну, что-то в духе:
Код: plaintext
1.
2.
select t1.*,
       (select max(t0.stop_time) from t t0 where t0.did < t1.did)
  from t t1
...
Рейтинг: 0 / 0
14.10.2009, 14:21
    #36250502
PaulS1986
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
Журавлев ДенисДобрый Э - Эх,
нельзя first в подзапросах.


PaulS1986, Пример напишите, с содержимым таблицы, с желаемым результатом

Пример :

did stop_time start_time uptime

13 2009-02-05 10:24:06 2009-02-05 10:28:19
14 2009-03-21 13:08:55 2009-03-21 13:10:28

желаемый результат :

did stop_time start_time uptime

13 2009-02-05 10:24:06 2009-02-05 10:28:19
14 2009-03-21 13:08:55 2009-03-21 13:10:28 44 02:40:36

вот так должно получится в таблице
...
Рейтинг: 0 / 0
14.10.2009, 14:23
    #36250506
PaulS1986
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
TmpFile(),

Да примерно так, надо обмозговать :)
...
Рейтинг: 0 / 0
14.10.2009, 14:38
    #36250560
TmpFile()
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
drop table "informix".downtime;
create table "informix".downtime
(
did serial not null ,
stop_time datetime year to second,
start_time datetime year to second,
uptime interval day to second,
primary key (did) constraint "informix".pk_downtime
);

insert into downtime (stop_time, start_time) values (current, current + interval ( 5 ) second to second );
insert into downtime (stop_time, start_time) values (current, current + interval ( 7 ) second to second );
insert into downtime (stop_time, start_time) values (current, current + interval ( 1 ) second to second );

select d1.did,  
       d1.stop_time - (select d2.start_time 
                         from downtime d2
                        where d2.did = (select max(did)
                                          from downtime
                                         where did <  d1.did)) uptime    
  from downtime d1
  into temp t_downtime with no log; 

update downtime
   set uptime = (select uptime
                   from t_downtime
                  where did = downtime.did)   
                  
select * from downtime;
...
Рейтинг: 0 / 0
14.10.2009, 14:43
    #36250575
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
from downtime d1, outer downtime d2
where d1.did=d2.did -1
...
Рейтинг: 0 / 0
14.10.2009, 14:51
    #36250595
TmpFile()
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
Журавлев Денис,

Код: plaintext
1.
2.
from downtime d1, outer downtime d2
where d1.did=d2.did - 1 

Это будет нормально, если таблица накопительная и в нее данные не "перезаливают".
Или там может быть разные устройства в одну и туже таблицу данные льют.
...
Рейтинг: 0 / 0
14.10.2009, 14:54
    #36250606
PaulS1986
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
TmpFile()
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
drop table "informix".downtime;
create table "informix".downtime
(
did serial not null ,
stop_time datetime year to second,
start_time datetime year to second,
uptime interval day to second,
primary key (did) constraint "informix".pk_downtime
);

insert into downtime (stop_time, start_time) values (current, current + interval ( 5 ) second to second );
insert into downtime (stop_time, start_time) values (current, current + interval ( 7 ) second to second );
insert into downtime (stop_time, start_time) values (current, current + interval ( 1 ) second to second );

select d1.did,  
       d1.stop_time - (select d2.start_time 
                         from downtime d2
                        where d2.did = (select max(did)
                                          from downtime
                                         where did <  d1.did)) uptime    
  from downtime d1
  into temp t_downtime with no log; 

update downtime
   set uptime = (select uptime
                   from t_downtime
                  where did = downtime.did)   
                  
select * from downtime;


TmpFile() ООооо.... ОГРОМНЕЙШЕЕ СПАСИБО!!! Я начало делал так же, но с селектами запутался!
...
Рейтинг: 0 / 0
14.10.2009, 15:18
    #36250714
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
TmpFile(),

а где идентикатор устройства?

мне как сказали я так и понял "отнять значение N-1" и под тестовый пример кстати мое решение подходит
...
Рейтинг: 0 / 0
14.10.2009, 15:21
    #36250723
PaulS1986
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
блин, рано радовался!

ругается на :
select d1.did,
d1.stop_time - (select d2.start_time
from downtime d2
where d2.did = (select max(did)
from downtime
where did < d1.did)) uptime
from downtime d1
into temp t_downtime with no log;

update downtime
set uptime = (select uptime
from t_downtime
where did = downtime.did)


-1260 It is not possible to convert between the specified types.
...
Рейтинг: 0 / 0
14.10.2009, 15:27
    #36250749
olleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
PaulS1986,

я так и не понял из вопроса и примера:

uptime interval day to second,
или
uptime integer ?
...
Рейтинг: 0 / 0
14.10.2009, 15:38
    #36250791
PaulS1986
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
uptime integer
...
Рейтинг: 0 / 0
14.10.2009, 15:54
    #36250860
olleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
Тогда исправляйте:

PaulS1986
желаемый результат :

did stop_time start_time uptime

13 2009-02-05 10:24:06 2009-02-05 10:28:19
14 2009-03-21 13:08:55 2009-03-21 13:10:28 44 02:40:36

вот так должно получится в таблице

44 02:40:36 это не integer
...
Рейтинг: 0 / 0
14.10.2009, 16:08
    #36250917
olleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
Вот integer:

cast(
cast('44 02:40:36' as interval day to second)
as interval second(9) to second)||' '+0
...
Рейтинг: 0 / 0
14.10.2009, 16:12
    #36250936
PaulS1986
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
olleg,

Спасибо! в раздумьях...
...
Рейтинг: 0 / 0
14.10.2009, 16:21
    #36250966
olleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
PaulS1986olleg,

Спасибо! в раздумьях...

Спасибо не мне, а АнатоЛой, за его ссылку в первом же посте
...
Рейтинг: 0 / 0
14.10.2009, 20:20
    #36251582
PaulS1986
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
TmpFile()
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
drop table "informix".downtime;
create table "informix".downtime
(
did serial not null ,
stop_time datetime year to second,
start_time datetime year to second,
uptime interval day to second,
primary key (did) constraint "informix".pk_downtime
);

insert into downtime (stop_time, start_time) values (current, current + interval ( 5 ) second to second );
insert into downtime (stop_time, start_time) values (current, current + interval ( 7 ) second to second );
insert into downtime (stop_time, start_time) values (current, current + interval ( 1 ) second to second );

select d1.did,  
       d1.stop_time - (select d2.start_time 
                         from downtime d2
                        where d2.did = (select max(did)
                                          from downtime
                                         where did <  d1.did)) uptime    
  from downtime d1
  into temp t_downtime with no log; 

update downtime
   set uptime = (select uptime
                   from t_downtime
                  where did = downtime.did)   
                  
select * from downtime;


TmpFile() есть вопросы :
в строке where did < d1.did)) uptime может должно быть так :where did < d1.did)) d1.uptime ???

что есть t_downtime ?
...
Рейтинг: 0 / 0
14.10.2009, 20:49
    #36251627
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение столбца в таблице из результатов предыдущих столбцов
PaulS1986
TmpFile() есть вопросы :
в строке where did < d1.did)) uptime может должно быть так :where did < d1.did)) d1.uptime ???


uptime есть имя столбца, полученного для текущего d1.did как

d1.stop_time - (select d2.start_time
from downtime d2
where d2.did = (select max(did)
from downtime
where did < d1.did))

PaulS1986
что есть t_downtime ?
t_downtime есть имя создаваемой временной таблицы, хранящей результат выполнения select
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Заполнение столбца в таблице из результатов предыдущих столбцов / 25 сообщений из 34, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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