获取帐户在最后一天之前在 TERADATA 或 Oracle 中拥有的不同名称,无需使用存储过程,只需查询

问题描述 投票:0回答:1

我需要计算帐户拥有的不同名称,其中包含帐户每次更新的日期。

日期 账户 姓名
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 日,我预计只计算一条记录。

问候!

sql oracle teradata
1个回答
0
投票

您可以在此处使用相关子查询:

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;
© www.soinside.com 2019 - 2024. All rights reserved.