根据某天某个用户的最大消费额来选择该记录的所有字段(200分)

  • 主题发起人 主题发起人 ljx
  • 开始时间 开始时间
L

ljx

Unregistered / Unconfirmed
GUEST, unregistred user!
我想求出某天某个用户的最大消费额,也要该记录的其它字段值,但用group by后select
里的只能用字段都要用合计函数,请问该怎么做呢?
 
select top 1 * from tablename order by 消费字段名 desc
 
分开写语句不就行了??
是不是太追求技巧了??
 
再改一下!
select a.消费字段名,b.* from
(select 用户ID,max(sum(消费字段名)) as 消费字段名 from tablename where .....group by 用户ID) a,
tablename b
where a.用户ID=b.用户ID
 
这个命令和数据库有关,如果是一些比较大的数据库,可以一个sql搞掂
如果你的是表叫小的数据库,或者桌面数据库,那就要看看你要显示什么列,选择的规则?
(很多条纪录,你要哪一条?)
 
对不起,可能是没讲明白,是在每个用户一天的N次消费中选出销费额最大的那条记录的
所有字段
 
搞错了:

假如消费额是 xf ,用户是 usrid
select * from 表名 t1 where xf in (select max(xf) from 表名 t2 where t2.usrid=t1.usrid);
缺点是如果N次消费,有x次消费金额一样都是最大的,那么会出来x条纪录
 
select distinct * from
( select * from tablename order by 消费金额)
 
to pipi:
先谢谢你了,但我一个表中是有很多用户的啊,你要先根据用户分组,再根据日期分组,
再求出该记录对应的主键,然后才能根据主键找到相应的记录,但用sql如何实现呢?
顺便说一下,我用的是assecc2000
 
你还是没有说清楚,你有几个表呢?如果只有一个表天真的第一个回答我觉得就可以了,如果表很多的话,就的先找出一个关联的主关键字然后查找了,其实我觉得楼上几位的观点应该是可行的
pipi和天真的
 
如“天真”所述的:“(select 用户ID,max(sum(消费字段名)) as 消费字段名
from tablename where .....group by 用户ID) a”
在access2000中根本不允许用了"group by 用户ID"以后再"select 用户ID",一定要用到
max、min、count等合计函数的啊。
我是在一个表中的,每个用户每天都有一个最大消费额的啊,不是在所有用户中选个
最大消费额,x谢谢大家的关注,继续!
 
假如消费额是 xf ,用户是 usrid,日期是date_(假设就是日期,不包含时间的,如果包含了时间,请你自己用函数转成纯日期,不含时间的)
select * from 表名 t1 where xf in (select max(xf) from 表名 t2 where t2.usrid=t1.usrid and t2.date_=t1.date_)
缺点是如果N次消费,有x次消费金额一样都是最大的,那么会出来x条纪录
 
谢谢pipi,基本上有结果了,就是太慢,还会死机,我换种数据库试试吧!
天真,你在group by的途径再试试吧,可能效率会高点。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部