要给客户做一个前台页面,显示出最近半年的销售额和点击量.要求是当前月份排名第一,降序排列最近半年的月份.就像这种
月份 点击 销售 支票号码
-----------------------------------------------
2009-12 12343 23232.92 29222009-11 12343 23232.22 29212009-10
.
.
.
2009-07 12131 232323.23 2901点击量方面,我就用一个表IPRecord记录的,点击时间是用datatime类型,
销售方面,我用一个INVOICE表记录,有销售完的时间(字符型),金额(字符型),客户账号.
支票这边我还没想好用什么做,老板是要求他要每一个月写和这个月的销售额相等的支票,要做一个可以输入支票号码的页.如果做总体的统计我可以用SQL来统计,可是这种分月份显示的要怎么做得好?
我原来是想再建一个表,是分月记录的这一切,然后每次销售完成后就判断一下当前时间, 再和表里的时候做对比,没有就新加一条,如果有的话,就取出来再update一下.显示时用gridview绑定单张表就可以了.但这种好像对数据库存取次数太多了,不是那么高效.而且很麻烦.所以上来问问大家,有没有什么别的方法,可以完成这种功能?
月份 点击 销售 支票号码
-----------------------------------------------
2009-12 12343 23232.92 29222009-11 12343 23232.22 29212009-10
.
.
.
2009-07 12131 232323.23 2901点击量方面,我就用一个表IPRecord记录的,点击时间是用datatime类型,
销售方面,我用一个INVOICE表记录,有销售完的时间(字符型),金额(字符型),客户账号.
支票这边我还没想好用什么做,老板是要求他要每一个月写和这个月的销售额相等的支票,要做一个可以输入支票号码的页.如果做总体的统计我可以用SQL来统计,可是这种分月份显示的要怎么做得好?
我原来是想再建一个表,是分月记录的这一切,然后每次销售完成后就判断一下当前时间, 再和表里的时候做对比,没有就新加一条,如果有的话,就取出来再update一下.显示时用gridview绑定单张表就可以了.但这种好像对数据库存取次数太多了,不是那么高效.而且很麻烦.所以上来问问大家,有没有什么别的方法,可以完成这种功能?
sum max min count
order by
这些东西的组合
sum max min count
order by
这些东西的组合这里需要月份的话还有,时间日期函数,什么datediff之类的东东
这里按月的话,应该用到
datediff
--返回跨两个指定日期的日期和时间边界数。
select datediff(month,'2009-09-01','2009-12-18') --返回:3
datepart
--返回代表指定日期的指定日期部分的整数。
SELECT DATEPART(month, '2009-10-15') --返回 10
insert into #tb1
select '10.110.112.119',convert(datetime,'2009-03-21'),'路人甲' union all
select '10.110.119.112',convert(datetime,'2009-07-02'),'路人乙' union all
select '10.112.110.119',convert(datetime,'2009-07-15'),'路人丙' union all
select '10.112.119.110',convert(datetime,'2009-08-19'),'路人丁' union all
select '10.119.110.112',convert(datetime,'2009-08-30'),'路人戊' union all
select '10.119.112.110',convert(datetime,'2009-09-01'),'路人己' union all
select '10.114.110.119',convert(datetime,'2009-10-28'),'路人庚' union all
select '10.114.112.119',convert(datetime,'2009-11-12'),'路人辛' union all
select '10.114.110.112',convert(datetime,'2009-12-07'),'路人壬'--select * from #tb1
--IP Click_Time UserName
---------------------- ----------------------- --------------------
--10.110.112.119 2009-03-21 00:00:00.000 路人甲
--10.110.119.112 2009-07-02 00:00:00.000 路人乙
--10.112.110.119 2009-07-15 00:00:00.000 路人丙
--10.112.119.110 2009-08-19 00:00:00.000 路人丁
--10.119.110.112 2009-08-30 00:00:00.000 路人戊
--10.119.112.110 2009-09-01 00:00:00.000 路人己
--10.114.110.119 2009-10-28 00:00:00.000 路人庚
--10.114.112.119 2009-11-12 00:00:00.000 路人辛
--10.114.110.112 2009-12-07 00:00:00.000 路人壬create table #tb2(BusinessTime nvarchar(20),BusinessMoney nvarchar(20),userName nvarchar(20))
insert into #tb2
select '2009-03-21','21.45','路人A' union all
select '2009-07-02','67.02','路人B' union all
select '2009-08-19','345.56','路人C' union all
select '2009-08-30','93.73','路人D' union all
select '2009-10-28','48.95','路人E' union all
select '2009-11-12','826.23','路人F'--select * from #tb2
--BusinessTime BusinessMoney userName
---------------------- -------------------- --------------------
--2009-03-21 21.45 路人A
--2009-07-02 67.02 路人B
--2009-08-19 345.56 路人C
--2009-08-30 93.73 路人D
--2009-10-28 48.95 路人E
--2009-11-12 826.23 路人F
--
--(6 個資料列受到影響)select C.StandTime,D.Click_Num,E.BusinessTotalMoney
from
(
select convert(nvarchar(7),getdate(),120) as StandTime union
select convert(nvarchar(7),dateadd(mm,-1,getdate()),120) union
select convert(nvarchar(7),dateadd(mm,-2,getdate()),120) union
select convert(nvarchar(7),dateadd(mm,-3,getdate()),120) union
select convert(nvarchar(7),dateadd(mm,-4,getdate()),120) union
select convert(nvarchar(7),dateadd(mm,-5,getdate()),120)
)C
left join
(
select A.Click_Time,sum(Ip) as Click_Num
from
(
select convert(nvarchar(7),Click_Time,120) as Click_Time,1 as Ip
from #tb1
where datediff(m,Click_Time,getdate())<6
)A
group by A.Click_Time
)D
on C.StandTime=D.Click_Time
left join
(
select B.BusinessTime,sum(B.BusinessMoney) as BusinessTotalMoney
from
(
select convert(nvarchar(7),BusinessTime,120) as BusinessTime,convert(float,BusinessMoney) as BusinessMoney
from #tb2
where datediff(m,convert(datetime,BusinessTime),getdate())<6
)B group by B.BusinessTime
)E
on C.StandTime=E.BusinessTime--StandTime Click_Num BusinessTotalMoney
----------- ----------- ----------------------
--2009-07 2 67.02
--2009-08 2 439.29
--2009-09 1 NULL
--2009-10 1 48.95
--2009-11 1 826.23
--2009-12 1 NULL
--
--(6 個資料列受到影響)
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试。