gpt4 book ai didi

sql - 按年和月选择总计数()组?

转载 作者:行者123 更新时间:2023-12-03 00:12:18 24 4
gpt4 key购买 nike

例如想象一下如下的表格

select accountid, createdon from account

73C56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:47.000
A7C56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:48.000
B7C56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:48.000
FBC56F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:49.000
CBC66F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:54.000
87C66F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:53.000
53C76F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:55.000
87C76F61-5FF1-E111-A4F8-005056977FBC 2012-08-28 22:26:56.000
2ED89924-5CFC-E111-A4F8-005056977FBC 2012-09-11 22:01:51.000
C0D79924-5CFC-E111-A4F8-005056977FBC 2012-09-11 22:01:49.000

然后在 2012 年 1 月,有 10 个帐户执行此查询

select count(*) from account

假设我在 2012 年 2 月有 5 个新帐户,那么在 2012 年 2 月查询 count(*) 将返回 15 个帐户。如果我在 2012 年 3 月有 10 个新帐户,那么在 2012 年 3 月查询 count(*) 将总共返回 35 个帐户。

我想得到以下结果

2012-january-10 accounts
2012-febrary-15 accounts
2012-march- 35 accounts

表帐户中的创建日期是日期,

但是如果我执行此查询

select year(createdon), month(createdon), count(*) quantity
from accounts
group by year(createdon), month(createdon)

我得到以下结果:

2012-january-10 accounts
2012-febrary-5 accounts
2012-march- 20 accounts

那么如何通过简单的查询得到第一个结果呢?不循环

最佳答案

您需要滚动总计。在 SQL Server 中有多种方法可以做到这一点(请参阅 Calculate a Running Total in SQL Server ),但对于 SQL 2005 最简单(不是最快)的方法是自连接

with cte as (
select
datename(year, createdon) + '-' + datename(month, createdon) as name,
convert(nvarchar(6), createdon, 112) as grp,
count(*) as cnt
from account
group by
datename(month, createdon), datename(year, createdon),
convert(nvarchar(6), createdon, 112)
)
select
c1.name, sum(c2.cnt) as cnt
from cte as c1
inner join cte as c2 on c2.grp <= c1.grp
group by c1.name

sql fiddle demo

关于sql - 按年和月选择总计数()组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18449009/

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