gpt4 book ai didi

SQL [Oracle] : Count number of previous records with same client ID

转载 作者:行者123 更新时间:2023-12-02 09:26:26 24 4
gpt4 key购买 nike

在网上进行了简短的搜索,看看是否已经存在这个问题的答案。找不到任何可以解决这种特殊情况的东西(这很令人惊讶,因为我认为这是相当常见的)。

基本上,我有一个表记录服务注册情况,以及注册客户端的 ID 以及注册的开始和结束日期。请参阅下面的表结构示例:

Reg ID | Client ID | Reg Start  | Reg End

R6 C1 01-06-2016 Null
R5 C2 20-05-2016 02-06-2016
R4 C2 14-03-2016 11-05-2016
R3 C1 10-03-2016 05-05-2016
R2 C2 28-01-2016 02-02-2016
R1 C2 10-11-2015 23-12-2015

我想要做的是从表中提取记录,同时添加一个列,该列返回表中每条记录具有相同客户端 ID 的先前注册数量。为了清楚起见,我只想对具有相同客户端 ID 且开始日期早于该记录的每条记录的注册进行计数。

因此,成功的查询将返回以下输出:

Reg ID | Client ID | Reg Start  | Reg End    | # previous reg

R6 C1 01-06-2016 Null 1
R5 C2 20-05-2016 02-06-2016 3
R4 C2 14-03-2016 11-05-2016 2
R3 C1 10-03-2016 05-05-2016 0
R2 C2 28-01-2016 02-02-2016 1
R1 C2 10-11-2015 23-12-2015 0

有没有人有过这样做的经验,可以提供可行的解决方案?

我最初的思考过程是创建一个子查询,对按客户端 ID 分组的注册进行计数,然后使用客户端 ID 将其加入到我的主查询中。例如:

SELECT
t1.reg_id
t1.client_id
t1.reg_start
t1.reg_end
FROM registrations t1
JOIN
(SELECT
client_id
count(reg_id)
FROM registrations
GROUP BY client_id) t2
ON t1.client_id = t2.client_id

但是,这将返回每条记录给定客户的注册计数,因为我特别要求之前注册。

hive 思维可以提供的任何输入将不胜感激。我认为我目前的 SQL 知识非常有限,在这里遇到了一些障碍:/

此外,我应该提到我正在使用 Oracle 数据库!

最佳答案

您可以使用row_number()来做到这一点:

select r.*,
(row_number() over (partition by client_id order by reg_start) - 1) as cnt
from registrations r;

关于SQL [Oracle] : Count number of previous records with same client ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37590993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com