Как бы я посчитал строки для отдельных групп, упорядоченные по дате? - PullRequest
0 голосов
/ 11 июля 2019

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

Вот как выглядит таблица: Cust_Tbl

| Account | Group | Join_Date  |
|---------|-------|------------|
| 1000    | 21    | 2007-07-22 |
| 1000    | 26    | 2017-03-08 |
| 1002    | 21    | 2014-06-19 |
| 1002    | 23    | 2019-01-01 |
| 1003    | 26    | 2005-10-05 |
| 1004    | 21    | 2018-05-07 |

Вот как я хочу, чтобы это выглядело так: Cust_Tbl2

| Account | Group | Join_Date  | Group_Order |
|---------|-------|------------|-------------|
| 1000    | 21    | 2007-07-22 | 1           |
| 1000    | 26    | 2017-03-08 | 2           |
| 1002    | 21    | 2014-06-19 | 1           |
| 1002    | 23    | 2019-01-01 | 2           |
| 1003    | 26    | 2005-10-05 | 1           |
| 1004    | 21    | 2018-05-07 | 1           |

Как видите, группы нумеруются в хронологическом порядке с разбивкой по счетам.

Я перепробовал множество других методов - включая некоторый код, который я нашел в других местах на SO -

Измените таблицу, добавив столбец идентификаторов на основе заказа по

Я относительно новичок в этом, так что мне было не совсем легко понять (были проблемы со свойством identity, но это не мой главный вопрос)

Самая близкая вещь, которую я смог придумать, - это простая оконная функция (которая также является новой для меня). Очевидно, это не работает, потому что он не группируется по номеру счета.

select 
    *
    , ROW_NUMBER() over(order by Join_Date) as num 
from 
    Cust_Tbl

Пока что я стою на месте. Любая помощь с благодарностью!

Редактировать: обновлен запрос для сопоставления таблиц

1 Ответ

2 голосов
/ 11 июля 2019

Чтобы получить ожидаемый результат, вам просто нужно добавить [раздел по аккаунту]:

select 
    *
    , ROW_NUMBER() over(partition by account order by [group]) as num 
from 
    Cust_Tbl

Вы использовали [order by rate_str].

Я не знаю, что [rate_str] есть.Я думаю, что вы можете использовать порядок по [группе]

Но:

Одна вещь, которую вы должны уточнить:

Например, я добавилтретья строка для счета 1000:

| 1000    | 21    | 2007-07-22 |
| 1000    | 26    | 2017-03-08 |
| 1000    | 21    | 2017-02-08 |

Ваш ожидаемый групповой заказ 1,2,3 или 1,2,2?

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

| 1000    | 21    | 2007-07-22 |
| 1000    | 21    | 2017-03-08 |
| 1000    | 26    | 2017-02-08 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...