SQLite для числовых рядов по двум критериям - PullRequest
1 голос
/ 01 мая 2020

Я хочу использовать sqlite для нумерации строк в CSV-файле по двум критериям: повторяющийся номер идентификатора и дата создания. (Я анализирую повторяющиеся данные аккаунта, сгенерированные DemandTools.) Просто, чтобы помочь объяснить, вот упрощенная версия того, что я хочу сделать:

Хочу превратить это:

Dupe Id #  |   Account Name   |   Created Date  |
1882       | A1, Inc.         |  03/15/2015     |
1567       | Joe's Plumbing   |  08/01/2019     |
1567       | Joes plubming    |  02/07/2020     |
1882       | A1 Corporation   |  06/20/2019     |
1882       | A1 Incorporated  |  05/16/2016     |

В это:

Dupe Id #  |   Account Name   |   Created Date  |   Dupe #   |
1567       | Joe's Plumbing   |  08/01/2019     |   0        |
1567       | Joes plubming    |  02/07/2020     |   1        |
1882       | A1, Inc.         |  03/15/2015     |   0        |
1882       | A1 Incorporated  |  05/16/2016     |   1        |
1882       | A1 Corporation   |  06/20/2019     |   2        |

Я хочу, чтобы исходная учетная запись имела значение 0, первый дублик 1, второй дублик 2 и т. д. c.

У меня был способ сделать это В Excel используется многостолбцовая сортировка и функция счетчика, такая как = COUNTIF (A $ 2: A2, A2) -1, но то, что работало в Excel для 100-тысячных строк и 10 столбцов, не работает с 700-тысячными строками и 24 столбцами.

Мои знания SQLite в настоящее время находятся на начальном уровне. Я понимаю основы, но не совсем уверен, с чего начать с такой проблемы. Я знаю, как сортировать по одному столбцу в SQLite, но я не знаю, как справиться с показательной частью проблемы (и, возможно, есть лучший способ с SQLite?).

Любая помощь очень признателен . , , .

Спасибо

1 Ответ

1 голос
/ 01 мая 2020

Первое, что вы должны сделать, это изменить формат ваших дат на YYYY-MM-DD, потому что это единственный допустимый формат для дат в SQLite, и он сопоставим. С ROW_NUMBER() оконной функцией:

select *,
  row_number() over (partition by Id order by CreatedDate) - 1 Dupe
from tablename 
order by id, Dupe

См. Демоверсию . Результаты:

| Id   | AccountName     | CreatedDate | Dupe |
| ---- | --------------- | ----------- | ---- |
| 1567 | Joe's Plumbing  | 2019-08-01  | 0    |
| 1567 | Joes plubming   | 2020-02-07  | 1    |
| 1882 | A1, Inc.        | 2015-03-15  | 0    |
| 1882 | A1 Incorporated | 2016-05-16  | 1    |
| 1882 | A1 Corporation  | 2019-06-20  | 2    |
...