我需要计算帐户拥有的不同名称,其中包含帐户每次更新的日期。
日期 | 账户 | 姓名 |
---|---|---|
2024-01-01 | A | XOXO |
2024-01-02 | A | XOXO |
2024-01-02 | A | OXXO |
2024-01-04 | A | XOOX |
2024-01-05 | A | OOXO |
2024-01-06 | A | XOXO |
因此,对于该日期之前的 2024 年 1 月 1 日,我没有账户 A 与另一个 NAME 的任何记录,但对于 2024 年 1 月 2 日的记录,这两条记录我已经拥有唯一的记录是 XOXO,所以在第三天我在该日期之前只有 2 个不同的NAMES。
所以我的查询结果必须是这样的>
日期 | 账户 | 计算不同的名称 |
---|---|---|
2024-01-01 | A | 空 |
2024-01-02 | A | 1 |
2024-01-04 | A | 2 |
2024-01-05 | A | 3 |
2024-01-06 | A | 4 |
我已经尝试过按帐户分区、按名称排序 此条件将每个名称视为唯一名称,即使它像 XOXO
一样重复DENSE_RANK() OVER(按 ACCOUNT 分区,按 NAME ASC 排序)+ DENSE_RANK() OVER(按 ACCOUNT 分区、按 NAME DESC 排序)- 1 作为 COUNTP
此条件始终返回每条记录的不同名称总数,即使对于 2024 年 2 月 2 日,我预计只计算一条记录。
问候!
您可以在此处使用相关子查询:
SELECT
t1.Date,
t1.ACCOUNT,
t1.NAME,
(SELECT COUNT(DISTINCT t2.NAME) FROM yourTable t2
WHERE t2.ACCOUNT = t1.ACCOUNT AND t2.Date < t1.Date) D_COUNT
FROM yourTable t1
ORDER BY
t1.ACCOUNT,
t1.Date;