У меня есть таблица подписки, которая выглядит следующим образом. Есть около 1 миллиона уникальных идентификаторов. В таблице указано состояние подписки, когда пользователь начал подписку на услугу, как указано «Суб», и когда она отписана, как указано «Usub».Заполните пропущенные значения в столбце, определяемом самим столбцом, и дате
ID Year Month Status
A 2014 1
A 2014 2
A 2014 3
A 2014 4 Sub
A 2014 5
A 2014 6
A 2014 7
A 2014 8 Usub
A 2014 9
A 2014 10
A 2014 11
A 2014 12
B 2014 1
B 2014 2
B 2014 3
B 2014 4
B 2014 5 Usub
B 2014 6
B 2014 7
B 2014 8
B 2014 9 Sub
B 2014 10
B 2014 11
B 2014 12
. . . .
. . . .
. . . .
Я ищу, чтобы заполнить промежуток между каждым обновлением статуса. Нужный таблица вывода будет выглядеть следующим образом:
ID Year Month Status
A 2014 1 Usub
A 2014 2 Usub
A 2014 3 Usub
A 2014 4 Sub
A 2014 5 Sub
A 2014 6 Sub
A 2014 7 Sub
A 2014 8 Usub
A 2014 9 Usub
A 2014 10 Usub
A 2014 11 Usub
A 2014 12 Usub
B 2014 1 Sub
B 2014 2 Sub
B 2014 3 Sub
B 2014 4 Sub
B 2014 5 Usub
B 2014 6 Usub
B 2014 7 Usub
B 2014 8 Usub
B 2014 9 Sub
B 2014 10 Sub
B 2014 11 Sub
B 2014 12 Sub
. . . .
. . . .
. . . .
Хотя первая таблица показывает, как пользователи имеют более чем одно изменение статуса, любой идентификатор не обязательно иметь больше чем одно изменение статуса. Однако каждый идентификатор будет иметь хотя бы один статус. то есть. пользователь, подписанный на 2014/8 и никогда не отменивший подписку, будет иметь статус = Sub на 2014/8.
Вы хотите сделать это с ** MySQL ** или с ** Hive **?!? Поскольку обычный SQL не будет делать, вам нужен какой-то процедурный трюк. –
@ Самсон, я хочу сделать это с помощью Hive, но также будет принимать подход mysql. – ohmyan