在线进行了简短搜索,以查看是否已经找到答案。找不到能够解决这种特殊情况的任何东西(这令人惊讶,因为我以为这很普遍)。
基本上,我有一个表,记录一个服务的注册,客户端注册的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
但是,这将返回每条记录给定客户的总注册计数,因为我特别要求以前的注册。
蜂巢的思想可以提供的任何输入将不胜感激。我认为我目前对SQL的了解非常有限,这让我有些不满:/
另外,我可能还应该提到我正在使用Oracle数据库!
您可以使用以下方法执行此操作row_number()
:
select r.*,
(row_number() over (partition by client_id order by reg_start) - 1) as cnt
from registrations r;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句