группировать по значению, но только для продолжения - PullRequest
0 голосов
/ 29 апреля 2020

ОК, название далеко не очевидно, я не мог объяснить это лучше. Давайте рассмотрим таблицу со столбцами (дата, xvalue, некоторые другие столбцы), мне нужно сгруппировать их по xvalue, но только когда они не прерываются с учетом времени (дата столбца), например, для:

      Date |xvalue      |yvalue|
    1 Mar  |10          |1     |
    2 Mar  |10          |2     |
    3 Mar  |20          |6     |
    4 Mar  |20          |1     |
    5 Mar  |10          |4     |
    6 Mar  |10          |2     |

Из приведенных выше данных я хотел бы получить три строки, для первого значения xvalue == 10, для значения xvalue == 20 и еще раз для значения xvalue == 10 и для каждого агрегата группы из другие значения, например, для суммы:

1 Mar, 10, 3
3 Mar, 20, 7
5 Mar, 10, 6

Это похоже на запрос:

select min(date), xvalue, sum(yvalue) from t group by xvalue

За исключением вышесказанного, объединятся 1,2,5 и 6 марта, и я хочу их отдельно

Ответы [ 2 ]

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

Это пример проблемы пробелов и островков. Но вам нужен столбец заказа. С таким столбцом вы можете использовать разницу номеров строк:

select min(date), xvalue, sum(yvalue)
from (select t.*,
             row_number() over (partition by xvalue order by date) as seqnum_d,
             row_number() over (order by date) as seqnum
      from t
     ) t
group by xvalue, (seqnum - seqnum_d)
order by min(date)

Здесь - это db <> скрипка.

0 голосов
/ 29 апреля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...