按年份和月份选择总计数()组?
问题描述:
例如想象一个表如下按年份和月份选择总计数()组?
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
比方说,我有5个新的账户在2012年2月,然后查询count(*)
在2012年2月返回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),但2005年的SQL简单(未最快)的方法是自联接
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
与此查询我得到相同的结果与第二个查询我有,每个月看第一个示例中的示例是count()current month更多count()of old months – angel
查看更新的答案 –
谢谢,我需要 – angel