SQLite根据两个标准对行进行编号

SQLite根据两个标准对行进行编号,sql,sqlite,row-number,Sql,Sqlite,Row Number,我想使用sqlite按两个条件对csv文件中的行进行编号:重复Id号和创建日期。(我正在分析DemandTools生成的重复帐户数据。)为了帮助解释,下面是我想做的一个简化版本: 要扭转这种局面: Dupe Id # | Account Name | Created Date | 1882 | A1, Inc. | 03/15/2015 | 1567 | Joe's Plumbing | 08/01/2019 | 1

我想使用sqlite按两个条件对csv文件中的行进行编号:重复Id号和创建日期。(我正在分析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,等等

我有一种方法可以在excel中使用多列排序和countif函数来实现这一点,比如=countif(a$2:A2,A2)-1,但在excel中处理100k行和10列时,并不能处理700k行和24列

我的SQLite知识目前处于初级水平。我了解基本知识,但不确定从何处开始解决这样的问题。我知道如何在SQLite中按单个列进行排序,但我不知道如何处理问题的countif部分(也许有更好的SQLite方法?)

非常感谢您的帮助


谢谢

您必须做的第一件事是将日期的格式更改为
YYYY-MM-DD
,因为这是SQLite中唯一有效的日期格式,并且具有可比性。
使用
行号()
窗口功能:

select *,
  row_number() over (partition by Id order by CreatedDate) - 1 Dupe
from tablename 
order by id, Dupe
请参阅。
结果:


嘿,非常感谢你的帮助。我忘了提到我计划将csv数据直接导入SQLite数据库。这会改变一切吗?(我想我会将CreatedDate列重新格式化为导入之前在excel中显示的格式。)正如我在问题中提到的,唯一有效的日期格式是
YYYY-MM-DD
,因此您必须更改格式,否则将无法直接比较和排序日期。关于Dupe列,不需要将其存储在表中。它是一个派生列。需要时,在查询中使用以下表达式:
row_number()over(按Id顺序按CreatedDate划分)-1
| 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    |