powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Заполнение столбца в таблице из результатов предыдущих столбцов
25 сообщений из 34, страница 1 из 2
Заполнение столбца в таблице из результатов предыдущих столбцов
    #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
Заполнение столбца в таблице из результатов предыдущих столбцов
    #36250286
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulS1986
первые 2 столбца stop_time и start_time заполнены данными, как из значения в строке N в 1 столбце отнять значение N-1 во втором и записать результат в N-ную строку столбца uptime ???
В чём? В секундах?
Не поверишь - поиск по форуму по "разность дат" рулит :)

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


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

Да примерно так, надо обмозговать :)
...
Рейтинг: 0 / 0
Заполнение столбца в таблице из результатов предыдущих столбцов
    #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
Заполнение столбца в таблице из результатов предыдущих столбцов
    #36250575
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
from downtime d1, outer downtime d2
where d1.did=d2.did -1
...
Рейтинг: 0 / 0
Заполнение столбца в таблице из результатов предыдущих столбцов
    #36250595
Фотография TmpFile()
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денис,

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

Это будет нормально, если таблица накопительная и в нее данные не "перезаливают".
Или там может быть разные устройства в одну и туже таблицу данные льют.
...
Рейтинг: 0 / 0
Заполнение столбца в таблице из результатов предыдущих столбцов
    #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
Заполнение столбца в таблице из результатов предыдущих столбцов
    #36250714
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TmpFile(),

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

мне как сказали я так и понял "отнять значение N-1" и под тестовый пример кстати мое решение подходит
...
Рейтинг: 0 / 0
Заполнение столбца в таблице из результатов предыдущих столбцов
    #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
Заполнение столбца в таблице из результатов предыдущих столбцов
    #36250749
olleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulS1986,

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

uptime interval day to second,
или
uptime integer ?
...
Рейтинг: 0 / 0
Заполнение столбца в таблице из результатов предыдущих столбцов
    #36250791
PaulS1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uptime integer
...
Рейтинг: 0 / 0
Заполнение столбца в таблице из результатов предыдущих столбцов
    #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
Заполнение столбца в таблице из результатов предыдущих столбцов
    #36250917
olleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот integer:

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

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

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

Спасибо не мне, а АнатоЛой, за его ссылку в первом же посте
...
Рейтинг: 0 / 0
Заполнение столбца в таблице из результатов предыдущих столбцов
    #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
Заполнение столбца в таблице из результатов предыдущих столбцов
    #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
25 сообщений из 34, страница 1 из 2
Форумы / Informix [игнор отключен] [закрыт для гостей] / Заполнение столбца в таблице из результатов предыдущих столбцов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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