Как сгруппировать соседнюю строку и суммировать данные в SQL - PullRequest
0 голосов
/ 21 апреля 2020

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

Мой код сейчас:

Select ID, Value from Table_1 

Example

Дополнительный вопрос

как насчет этого?

Further_Example

1 Ответ

2 голосов
/ 21 апреля 2020

Это типичные пробелы и проблема острова.

Для начала: имейте в виду, что SQL таблицы представляют неупорядоченный набор строк. Так что для решения вашего вопроса вам нужен столбец, который определяет порядок строк в таблице - я предположил ordering_id.

Вот подход, который использует разницу между row_numbers() для построения групп смежных строк, имеющих одинаковые id:

select 
    id,
    sum(value) value
from (
    select 
        t.*,
        row_number() over(order by ordering_id) rn1
        row_number() over(partition by id order by ordering_id) rn2
    from mytable t
) t
group by id, rn1 - rn2

Если вы хотите это на для пользователя :

select 
    user,
    id,
    sum(value) value
from (
    select 
        t.*,
        row_number() over(partition by user order by ordering_id) rn1
        row_number() over(partition by user, id order by ordering_id) rn2
    from mytable t
) t
group by user, id, rn1 - rn2
...