2011-05-04 27 views
0
ID mobileno dateofregistration  registrationstate 
44 1674174925 2011-04-18 10:17:30.670  0 
45 1677864168 2011-04-18 10:20:22.450  1 
46 1677864161 2011-04-18 20:47:35.293  0 
47 1674174925 2011-04-19 09:28:55.200  1 
48 1674174925 2011-04-19 09:28:56.200  0 
49 1674174925 2011-04-19 09:28:57.200  1 
50 1674174925 2011-04-18 10:17:30.670  0 
51 1677864168 2011-04-18 10:20:22.450  1 
52 1677864161 2011-04-20 20:47:35.293  0 
53 1674174925 2011-04-22 09:28:55.200  1 
54 1674174925 2011-04-28 09:28:56.200  0 
55 1674174925 2011-04-28 09:28:57.200  1 

我的问题是如何具备以下条件计算行数:比较看重行

registrationstate = 1datediff(day,dateofregistration) > 30对个人手机号码。

这里的结果将是1

+0

你是什么意思“结果将是1”的行数? “1”是什么?你在找什么 - 手机号**的**号。那符合那个标准(我得到2那.....)或什么?根本不清楚..... – 2011-05-04 12:48:01

回答

0

首先,datediff需要3个参数

DATEDIFF (datepart , startdate , enddate) 

我认为你要与今天的日期进行比较,这样你就可以使用getdate()

select * from yourtable 
where registrationstate = 1 
and datediff(day, dateofregistration, getdate()) > 30 

如果getdate()返回2011-05-04,您将获得以下输出

------------------------------------------------------------ 
ID mobileno dateofregistration  registrationstate 
------------------------------------------------------------ 
45 1677864168 2011-04-18 10:20:22.450  1 
47 1674174925 2011-04-19 09:28:55.200  1 
49 1674174925 2011-04-19 09:28:57.200  1 
51 1677864168 2011-04-18 10:20:22.450  1 
53 1674174925 2011-04-22 09:28:55.200  1 
55 1674174925 2011-04-28 09:28:57.200  1 
------------------------------------------------------------ 

现在您想将结果按mobileno分组,并返回每个组的行数。您可以使用COUNT(*)聚合函数返回每组

select COUNT(*) as total, mobileno from yourtable 
where registrationstate = 1 
and datediff(day, dateofregistration, getdate()) > 30 
group by mobileno 

,你会得到下面的输出

------------------------------------------------------------ 
mobileno  total 
------------------------------------------------------------ 
1677864168 2 
1674174925 4 
------------------------------------------------------------