SQL-三个月之内累计消费满1000元的卡号

来源:互联网 发布:软件回归测试 编辑:程序博客网 时间:2024/04/30 22:04

想查询出三个月之内累计消费满1000元的卡号 请问这个sql怎么写啊? 

开始的思路是

select  卡号,sum(消费金额) from table  
where  datediff(month,消费日期,getdate())<3
group by 卡号 having sum(消费金额)>1000 
AND   DATEdiff(month,MIN(消费日期),消费日期)<3

但是需求是任意三个月的消费满1000.任意这个条件开始让我很困惑,怎么才能达到任意呢

最好找到一个办法,

DECLARE @begindate DATETIME
DECLARE @enddate DATETIME

SET @begindate='20140101'
SET @enddate=GETDATE()

create table #Temp(id varhcar(100))
WHILE(@begindate<@enddate)
BEGIN

insert into Temp

select  卡号

 from table  

where 消费日期 BETWEEN @begindate AND @begindate+90

group by 卡号 having sum(消费金额)>1000 


SET @begindate=@begindate+1


END 

很多问题,发散一下思维其实很好解决



问题:有如下表


序号汇总1122334455
求结果:

序号汇总112336410515



就是求每个汇总,是之前所有ID的汇总,

CREATE TABLE #t(id INT IDENTITY(1,1),num INT)
INSERT INTO #t(num)
SELECT 1
UNION 
SELECT 2
UNION 
SELECT 3
UNION 
SELECT 4
UNION 
SELECT 5
UNION 
SELECT 6


SELECT *FROM #t t

答案:
SELECT a.id,SUM(b.num)
FROM #t a
left JOIN #t b ON a.id>=b.id
GROUP BY a.id

答案2,

select ID , price1, name , total = (select sum(total) from table where id <= b.id ) from table b  order by id asc 

主要学习这些问题的思考方式.

thinking in set
作为一个DBA,我对"thinking in set"的解释是,
按集合理论来看待数据库

这类逻辑属于“连续聚合,滑动聚合”一类。可以看Itzik的书 

 有3个表,A(账号ID,IP),B(账号ID,账号),C(账号ID,角色),我输入IP,账号,角色任意一个如何查询其他几个的信息
1.思路1,通过判断变量的值,查询不同的表,再通过临时表联合查询(程序员思想)
 2.使用内连接
SELECT TOP 1000 a.AccountName,b.IPAddress,c.PlayerName FROM dbo.Tbl_Account   a
INNER JOIN dbo.Tbl_UserMachine B ON a.accountid=b.accountid 
 INNER JOIN dbo.Tbl_Player c ON a. accountid=c.accountid
WHERE  (a.AccountId LIKE '%%' AND  b.IPAddress LIKE '%%' AND c.PlayerName LIKE '%韩国%')

如一个表在很多数据库中都存在,我要同时查这几个表中的数据,用什么办法比较好,视图吗

使用跨库视图

注意其中的数据库思想!

0 0