create table test(日期 datetime,销售额 int) insert test select '2007-6-1',2022 union all select '2007-6-2',20267 union all select '2007-6-3',45455 union all select '2007-2-1',2022 union all select '2007-2-2',20267 union all select '2007-2-3',20267select 日期,天数=datediff(day,日期+'-01',dateadd(month,1,日期+'-01')), 日销售额=总销售额/datediff(day,日期+'-01',dateadd(month,1,日期+'-01')) from ( select 日期=convert(char(7),日期,120),总销售额=sum(销售额) from test group by convert(char(7),日期,120) )adrop table test日期 天数 日销售额 ------- ----------- ----------- 2007-02 28 1519 2007-06 30 2258
如果每天都有数据,可以不用求每月天数select convert(varchar(7),日期,120) as 年月,avg(销售额) as 日均销售额 from tablename group by convert(varchar(7),日期,120)
你题目的要求是除以当月总天数的啊这样? create table test(日期 datetime,销售额 int) insert test select '2007-6-1',2022 union all select '2007-6-2',20267 union all select '2007-6-3',45455 union all select '2007-2-1',2022 union all select '2007-2-2',20267 union all select '2007-2-3',20267 union all select '2007-2-8',20267select 日期,当月天数=datediff(day,日期+'-01',dateadd(month,1,日期+'-01')),已过天数, 日销售额=总销售额/已过天数 from ( select 日期=convert(char(7),日期,120),已过天数=count(*),总销售额=sum(销售额) from test group by convert(char(7),日期,120) )adrop table test日期 当月天数 已过天数 日销售额 ------- ----------- ----------- ----------- 2007-02 28 4 15705 2007-06 30 3 22581
avg可以不管当月是全月的还是半月的
select convert(varchar(7),日期,120) as 年月,avg(销售额) as 日均销售额 from t group by convert(varchar(7),日期,120)
看了一下楼主的需求,有两个关键点: 1.是不是每天都有交易数据?是不是每天只有一条交易数据?如果是的话直接用avg就搞定了,如果不是那么就不能直接用avg了。 2.当前月(还没有过完的月份)要怎么处理?除以总天数还是Month To Date?楼主搞清除这两个问题以后用上面兄弟的一些方法就能搞定啦。
2. 可以用MONTH(data)来获取检索日期中的月份,再根据月份来返回天数。
insert test select '2007-6-1',2022
union all select '2007-6-2',20267
union all select '2007-6-3',45455
union all select '2007-2-1',2022
union all select '2007-2-2',20267
union all select '2007-2-3',20267select 日期,天数=datediff(day,日期+'-01',dateadd(month,1,日期+'-01')),
日销售额=总销售额/datediff(day,日期+'-01',dateadd(month,1,日期+'-01')) from
(
select 日期=convert(char(7),日期,120),总销售额=sum(销售额)
from test
group by convert(char(7),日期,120)
)adrop table test日期 天数 日销售额
------- ----------- -----------
2007-02 28 1519
2007-06 30 2258
from tablename
group by convert(varchar(7),日期,120)
对于现在时间2007-7-13,
查看7月份的日均销售额,如果按的算法是:
日均销售额=该月总销售额/31天,
但是明显7 月份的记录还没有提交完毕,除以31那就不准确了!
create table test(日期 datetime,销售额 int)
insert test select '2007-6-1',2022
union all select '2007-6-2',20267
union all select '2007-6-3',45455
union all select '2007-2-1',2022
union all select '2007-2-2',20267
union all select '2007-2-3',20267
union all select '2007-2-8',20267select 日期,当月天数=datediff(day,日期+'-01',dateadd(month,1,日期+'-01')),已过天数,
日销售额=总销售额/已过天数 from
(
select 日期=convert(char(7),日期,120),已过天数=count(*),总销售额=sum(销售额)
from test
group by convert(char(7),日期,120)
)adrop table test日期 当月天数 已过天数 日销售额
------- ----------- ----------- -----------
2007-02 28 4 15705
2007-06 30 3 22581
from t
group by convert(varchar(7),日期,120)
1.是不是每天都有交易数据?是不是每天只有一条交易数据?如果是的话直接用avg就搞定了,如果不是那么就不能直接用avg了。
2.当前月(还没有过完的月份)要怎么处理?除以总天数还是Month To Date?楼主搞清除这两个问题以后用上面兄弟的一些方法就能搞定啦。