Добавление категориальной переменной в зависимости от времени в Postgresql

72
7

У меня есть база данных

CREATE TABLE data.atc full

(
index character varying,
serial_nbr bigint,
date_ date,
time_ time without time zone,

)

и данные выглядят как

"35107592";40873618845;"2016-01-20";"10:33:00"
"35107593";1600473508;"2016-01-20";"10:33:00"
"35107594";40872283641;"2016-01-20";"10:34:00"
"35107596";713186627;"2016-01-20";"10:34:00"
"35107598";42568856045;"2016-01-20";"10:34:00"
"35107600";1836730779;"2016-01-20";"10:34:00"
"35107601";713323741;"2016-01-20";"10:34:00"
"35107603";713985185;"2016-01-20";"10:34:00"
"35107604";40872125248;"2016-01-20";"10:34:00"
"35107605";711995425;"2016-01-20";"10:34:00"
"35107606";40877157402;"2016-01-20";"10:34:00"
"35107607";711492382;"2016-01-20";"10:34:00"

Я хочу добавить еще один столбец в базу данных, которая принимает значения 0, 1, 2,... для разных записей времени для определенного дня и определенного серийного номера. Таким образом, для каждого серийного номера я могу проверить первую запись дня и аналогичную вторую запись дня и так далее.

Я начинаю с добавления столбца

ALTER TABLE data.atc ADD COLUMN od

Я не мог думать об этом. Пожалуйста помоги.

спросил(а) 2017-03-13T22:28:00+03:00 3 года, 8 месяцев назад
1
Решение
71

Почему бы просто не использовать запрос?

select a.*,
row_number() over (partition by serial_nbr, date_ order by time_) as seqnum
from data.atc a;

Вы можете сохранить это значение в данных, но тогда больно поддерживать его в актуальном состоянии. update происходит, появляются новые данные. , , и как вы назначаете новые значения?

Вы можете сохранить значение с помощью update:

update data.atc a
set od = seqnum
from (select a.*,
row_number() over (partition by serial_nbr, date_ order by time_) as seqnum
from data.atc a
) aa
where aa.serial_nbr = a.serial_nbr and aa.date_ = a.date_ and
aa.time_ = a.time_;

ответил(а) 2017-03-13T22:37:00+03:00 3 года, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема