Ранг / группа в улье - PullRequest
       6

Ранг / группа в улье

0 голосов
/ 15 октября 2018

У меня есть первые три столбца на скриншоте, упорядоченные по времени записи.Я хочу дать тот же диапазон группе до появления области 'CDEF'.Подскажите, пожалуйста, как мне добиться этого результата в улье.

enter image description here

CREATE TABLE TEST (RECORD_DATE STRING, AREA STRING, REASON STRING);

INSERT INTO TEST (RECORD_DATE, AREA, REASON)
VALUES ('10/11/2017','A','a'), 
('10/12/2017','A','a'), 
('10/13/2017','B','b'), 
('10/14/2017','CDEF','A:B'), 
('10/15/2017','E','e') ,
('10/16/2017','F','f'),
('10/17/2017','CDEF','E:F');

Спасибо.

1 Ответ

0 голосов
/ 15 октября 2018

Я не могу получить результаты за один проход, поэтому я использовал промежуточные таблицы.Надеюсь, что шаги объяснительные.Проверьте это.

select * from sam;

+------------------+-----------+-------------+--+
| sam.record_date  | sam.area  | sam.reason  |
+------------------+-----------+-------------+--+
| 2017-10-11       | A         | a           |
| 2017-10-12       | A         | a           |
| 2017-10-13       | B         | b           |
| 2017-10-14       | CDEF      | A:B         |
| 2017-10-15       | E         | e           |
| 2017-10-16       | F         | f           |
| 2017-10-17       | CDEF      | E:F         |
+------------------+-----------+-------------+--+


create table sam2 as  select s1.*, s2.record_date as dt2  from sam s1 , ( select record_date,area,reason from sam where area='CDEF') s2 where s2.record_date >=s1.record_date;

+-------------------+------------+--------------+-------------+--+
| sam2.record_date  | sam2.area  | sam2.reason  |  sam2.dt2   |
+-------------------+------------+--------------+-------------+--+
| 2017-10-11        | A          | a            | 2017-10-14  |
| 2017-10-12        | A          | a            | 2017-10-14  |
| 2017-10-13        | B          | b            | 2017-10-14  |
| 2017-10-14        | CDEF       | A:B          | 2017-10-14  |
| 2017-10-11        | A          | a            | 2017-10-17  |
| 2017-10-12        | A          | a            | 2017-10-17  |
| 2017-10-13        | B          | b            | 2017-10-17  |
| 2017-10-14        | CDEF       | A:B          | 2017-10-17  |
| 2017-10-15        | E          | e            | 2017-10-17  |
| 2017-10-16        | F          | f            | 2017-10-17  |
| 2017-10-17        | CDEF       | E:F          | 2017-10-17  |
+-------------------+------------+--------------+-------------+--+

create table sam3 as select s.*, row_number() over(partition by record_date order by dt2) rn  from sam2 s;

+----------------+---------+-----------+-------------+-----+--+
| s.record_date  | s.area  | s.reason  |    s.dt2    | rn  |
+----------------+---------+-----------+-------------+-----+--+
| 2017-10-11     | A       | a         | 2017-10-14  | 1   |
| 2017-10-11     | A       | a         | 2017-10-17  | 2   |
| 2017-10-12     | A       | a         | 2017-10-14  | 1   |
| 2017-10-12     | A       | a         | 2017-10-17  | 2   |
| 2017-10-13     | B       | b         | 2017-10-14  | 1   |
| 2017-10-13     | B       | b         | 2017-10-17  | 2   |
| 2017-10-14     | CDEF    | A:B       | 2017-10-14  | 1   |
| 2017-10-14     | CDEF    | A:B       | 2017-10-17  | 2   |
| 2017-10-15     | E       | e         | 2017-10-17  | 1   |
| 2017-10-16     | F       | f         | 2017-10-17  | 1   |
| 2017-10-17     | CDEF    | E:F       | 2017-10-17  | 1   |
+----------------+---------+-----------+-------------+-----+--+

 select s.*, dense_rank() over(order by dt2 ) rk from sam3 s where rn=1 order by record_date;

 +----------------+---------+-----------+-------------+-------+-----+--+
 | s.record_date  | s.area  | s.reason  |    s.dt2    | s.rn  | rk  |
 +----------------+---------+-----------+-------------+-------+-----+--+
 | 2017-10-11     | A       | a         | 2017-10-14  | 1     | 1   |
 | 2017-10-12     | A       | a         | 2017-10-14  | 1     | 1   |
 | 2017-10-13     | B       | b         | 2017-10-14  | 1     | 1   |
 | 2017-10-14     | CDEF    | A:B       | 2017-10-14  | 1     | 1   |
 | 2017-10-15     | E       | e         | 2017-10-17  | 1     | 2   |
 | 2017-10-16     | F       | f         | 2017-10-17  | 1     | 2   |
 | 2017-10-17     | CDEF    | E:F       | 2017-10-17  | 1     | 2   |
 +----------------+---------+-----------+-------------+-------+-----+--+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...