这样的SQL语句如何写? ( 积分: 100 )

  • 主题发起人 主题发起人 tonyliu
  • 开始时间 开始时间
T

tonyliu

Unregistered / Unconfirmed
GUEST, unregistred user!
数据表如下:<br>custid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num<br>1021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070911&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;123.2<br>1022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070919&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3410.2<br>1021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070912&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;224.6<br>1022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070901&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4434.3<br>1021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070914&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32.4<br>1022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070914&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;324.09<br>1021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070923&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;324.23<br>1022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070912&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;324.6<br><br>要对custid为1021和1022分别统计前头两个日期的num值的和,这样的SQL语句如何写,请各位多多指教
 
select&nbsp;(select&nbsp;sum(num)&nbsp;from&nbsp;tablename&nbsp;where&nbsp;data&gt;='20070911'&nbsp;and&nbsp;data&lt;='20070912'&nbsp;and&nbsp;custid=1021)&nbsp;as&nbsp;num1,(select&nbsp;sum(num)&nbsp;from&nbsp;tablename&nbsp;where&nbsp;data&gt;='20070919'&nbsp;and&nbsp;data&lt;='20070901'&nbsp;and&nbsp;custid=1022)&nbsp;as&nbsp;num2&nbsp;from<br>tablename&nbsp;a
 
不太懂你的意思,是否是把custid分组并求num的和?<br>如果是这样sql=<br>select&nbsp;custid,sum(num)&nbsp;as&nbsp;sum_num&nbsp;from&nbsp;表&nbsp;where&nbsp;custid&nbsp;in&nbsp;(select&nbsp;custid&nbsp;from&nbsp;表&nbsp;group&nbsp;by&nbsp;custid)&nbsp;group&nbsp;by&nbsp;custid
 
wzquan和corpose0的统计不行,假如数据很多你就不可以判断日期范围了<br>一天可能有多条记录,我就需要不同custid前两条记录的num值求和。<br>既入表<br>custid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recordno<br>1021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070911&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;123.2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>1021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070911&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;523.2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br>1022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070919&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3410.2&nbsp;&nbsp;&nbsp;&nbsp;3<br>1021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070912&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;224.6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<br>1022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070901&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4434.3&nbsp;&nbsp;&nbsp;&nbsp;5<br>1021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070914&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32.4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6<br>1022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070914&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;324.09&nbsp;&nbsp;&nbsp;&nbsp;7<br>1021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070923&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;324.23&nbsp;&nbsp;&nbsp;&nbsp;8<br>1022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20070912&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;324.6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9<br><br>custid=1021的只求出1和2记录的num的和,custid=1022的只求出5和9记录的num的和<br><br>即,对custid进行分组,并对日期最小的两条记录的num求和
 
必须有一个唯一的ID列,现在假设你的ID列存在,名字为recordno<br><br>select&nbsp;a.custid,&nbsp;sum(a.num)&nbsp;from&nbsp;tab&nbsp;a,(<br>&nbsp;&nbsp;select&nbsp;*,&nbsp;(<br>&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;count(*)&nbsp;from&nbsp;tab&nbsp;b&nbsp;where&nbsp;a.custid=b.custid&nbsp;and&nbsp;a.data&nbsp;&gt;&nbsp;b.data<br>&nbsp;&nbsp;)+1&nbsp;c&nbsp;from&nbsp;tab&nbsp;a<br>)&nbsp;b<br>where&nbsp;a.recordno&nbsp;=&nbsp;b.recordno&nbsp;and&nbsp;b.c&nbsp;&lt;=2<br>group&nbsp;by&nbsp;a.custid
 
select&nbsp;custid,sum(num)&nbsp;as&nbsp;sum_num<br>from&nbsp;(<br> select&nbsp;*<br> from&nbsp;tb&nbsp;a<br> where&nbsp;(select&nbsp;count(1)&nbsp;from&nbsp;tb&nbsp;b&nbsp;where&nbsp;a.custid=b.custid&nbsp;and&nbsp;b.data&lt;a.data)&lt;2<br>)&nbsp;tb<br>group&nbsp;by&nbsp;custid
 
s00000000001比较接近,但还是有问题假如custid和data相同,并且相同记录大于2条,这样就会把日期相同的全部求和了
 
还差一点我没时间要下班了。不知道是哪有问题。思路是对的。你自己看下<br>select&nbsp;custid,(select&nbsp;sum(num)&nbsp;from&nbsp;(select&nbsp;top&nbsp;2&nbsp;*&nbsp;from&nbsp;<br>(select&nbsp;top&nbsp;100&nbsp;percent&nbsp;*<br>&nbsp;from&nbsp;a&nbsp;order&nbsp;by&nbsp;custid,date)&nbsp;c&nbsp;where&nbsp;custid=b.custid)&nbsp;d)&nbsp;from&nbsp;(select&nbsp;distinct&nbsp;custid&nbsp;from&nbsp;a)&nbsp;b
 
多花点时间想下就能写出来咯
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
454
import
I
后退
顶部