Sql 计算每年的客户数量(新客户和返回客户)
各位, 我试图形成一个查询,显示特定年份的客户数量。clients表包含一个字段client_-since、all-clients-info、active_-client、date_-deleted,当客户端取消订阅通信时用作标志 每一张唱片的客户名单都显示了他们成为客户的那一年。 当我按年查询时,我会得到新客户的记录,但是,我正在尝试形成查询,以显示新客户和返回客户的数量。为了争论,所有的客户都回来了 假设我2008年有1个客户,2009年有6个客户,2010年有6个客户,2011年有10个客户,依此类推。我需要这个查询按年度汇总所有客户 我得到的结果是:Sql 计算每年的客户数量(新客户和返回客户),sql,sql-server,sql-server-2008,count,sum,Sql,Sql Server,Sql Server 2008,Count,Sum,各位, 我试图形成一个查询,显示特定年份的客户数量。clients表包含一个字段client_-since、all-clients-info、active_-client、date_-deleted,当客户端取消订阅通信时用作标志 每一张唱片的客户名单都显示了他们成为客户的那一年。 当我按年查询时,我会得到新客户的记录,但是,我正在尝试形成查询,以显示新客户和返回客户的数量。为了争论,所有的客户都回来了 假设我2008年有1个客户,2009年有6个客户,2010年有6个客户,2011年有10个客
select count (id) as [New Clients],client_since
from tax_clients
where client_since >= 2008
group by client_since
结果是:
new clients
1 2009
8 2010
6 2011
6 2012
11 2013
6 2014
9 2015
17 2016
20 2017
13 2018
26 2019
41 2020
7 2021
因此,计算将添加所有新客户机
谁能告诉我如何构造查询
谢谢
我正在尝试形成查询,以显示新客户和返回客户的数量。为了争论,所有的客户都回来了
返回的客户端逻辑看起来是一个窗口和:
select
client_since,
count(*) as new_clients,
sum(count(*)) over(order by client_since) returning_clients
from tax_clients
where client_since >= 2008
group by client_since
order by client_since
可能非常旧版本的SQL Server更喜欢子查询,而不是在同一范围内混合使用聚合和窗口函数:
select t.*,
sum(new_clients) over(order by client_since) returning_clients
from (
select client_since, count(*) as new_clients
from tax_clients
where client_since >= 2008
group by client_since
) t
order by client_since
假设客户处于活动状态时,您每年有一条记录,则可以使用lag:
请定义新建和返回?如果客户跳过几年怎么办?示例数据和期望的结果会有所帮助。新客户机是第一个使用该服务的客户机,returning是一个每年都返回的客户机。如果一个客户端跳过一年,它将被禁用,当它返回时,它将被视为一个新的客户端。你为什么要使用不受支持的软件?这就是我所拥有的。我不做很多数据库的东西,只是基本的。总有一天我会升级,但今天,这就是我的工作…谢谢。我得到消息102,级别15,状态1,第4行“订单”附近的语法不正确。我没有提到这是sql 2008…用…替换超额订单。。。由于。。。给出与原始查询2009 1 1 2010 8 8 2011 6 6 2012 6 6 2013 11 2014 6 2015 9 9 2016 17 2017 20 20 2018 13 13 2019 26 2020 41 2021 7相同的结果7@Antonio:你需要提前订货。分区方式不起同样的作用。我用一个可能在旧版本(如youers)上工作得更好的替代方案更新了我的答案。lag不是公认的内置函数,我仍然在上一次查询Msg 102,15级,状态1,第2行“order”附近出现语法错误。GMB,此查询在第2行select t.*上的order附近仍然出现语法错误,sumnew_客户自返回所选客户自以来的超额订单,将*视为来自税务客户t的新客户,其中客户自>=2008年集团自客户自自自客户自订单以来Gordon sinceHi。Lag对sql 2008无效…不是有效的内置函数。
select client_since, count(*) as num_active_clients,
sum(case when prev_cs = client_since - 1 then 1 else 0 end) as num_new_clients
from (select t.*,
lag(client_since) over (partition by id order by client_since) as prev_cs
from tax_clients t
) t
group by client_since