求SQL语句,希望能从数据库中筛选同一用户的最后一次购气记录,同时统计该用户的所有购气次数和总购气量! 10
数据库结构如下:用户名购气日期购气量张三2012-05-06100李四2012-06-05200王五2013-02-0150李四2012-05-06100李四2012-0...
数据库结构如下:
用户名 购气日期 购气量
张三 2012-05-06 100
李四 2012-06-05 200
王五 2013-02-01 50
李四 2012-05-06 100
李四 2012-06-08 200
张三 2012-08-09 50
=========
希望得到结果:
用户名 购气日期 购气量 购气次数 购气总量
张三 2012-08-09 50 2 150
李四 2012-06-08 200 3 500
王五 2013-02-01 50 1 50 展开
用户名 购气日期 购气量
张三 2012-05-06 100
李四 2012-06-05 200
王五 2013-02-01 50
李四 2012-05-06 100
李四 2012-06-08 200
张三 2012-08-09 50
=========
希望得到结果:
用户名 购气日期 购气量 购气次数 购气总量
张三 2012-08-09 50 2 150
李四 2012-06-08 200 3 500
王五 2013-02-01 50 1 50 展开
5个回答
展开全部
这个得用开窗函数,我知道db2和oracle支持(我的测试如下)如果有更好的方法,请告诉我
D:\>db2 with aa as (select distinct na, da, row_number() over (partition by na) n, max(ql)over (partition by na order by da desc) ma, count(na) over(partition by na) con, sum(ql) over(partition by na)su from q) select na 名, da 时, ma 气, con 次, su 总 from aa where (na, n) in (select na, max(n) from aa group by na)
名 时 气 次 总
---------- ---------- ----------- ----------- -----------
王五 2013-02-01 50 1 50
张三 2012-05-06 100 2 150
李四 2012-05-06 200 3 500
3 条记录已选择。
D:\>db2 with aa as (select distinct na, da, row_number() over (partition by na) n, max(ql)over (partition by na order by da desc) ma, count(na) over(partition by na) con, sum(ql) over(partition by na)su from q) select na 名, da 时, ma 气, con 次, su 总 from aa where (na, n) in (select na, max(n) from aa group by na)
名 时 气 次 总
---------- ---------- ----------- ----------- -----------
王五 2013-02-01 50 1 50
张三 2012-05-06 100 2 150
李四 2012-05-06 200 3 500
3 条记录已选择。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select 用户名,max(购气日期) 购气日期 ,购气量,count(*) 购气次数,sum(购气量) 购气总量 from 表名 group by 用户名,购气量
追问
楼上的SQL语句,不应该加入"group by 用户名,购气量"中的购气量,加入后没有筛选出的结果.
本人使用的语句:select 用户名,count(*) 购气次数,sum(购气量) 购气总量 from 表名 group by 用户名只能得到如下内容,不知道如何把最后一条记录中的"购气日期"和"购气量",带入结果中
用户名 购气次数 购气总量
张三 2 150
李四 3 500
王五 1 50
追答
select a.用户名,a.购气日期,b.购气量,a.购气次数,a.购气总量
from
(select 用户名,max(购气日期) 购气日期,count(*) 购气次数,sum(购气量) 购气总量 from 表名 group by 用户名) a,
表名 b where a.用户名=b.用户名 and a.购气日期=b.购气日期
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-03-14
展开全部
SELECT
t.用户名,
MAX( t.购气日期 ) AS 购气日期,
( SELECT MAX(s.购气量)
FROM 表 s
WHERE s.用户名 = t.用户名
AND s.购气日期 = MAX( t.购气日期 ) ) AS 购气量,
COUNT( t.购气日期 ) AS 购气次数,
SUM( t.购气量 ) AS 购气总量
FROM
表 t
GROUP BY
用户名
t.用户名,
MAX( t.购气日期 ) AS 购气日期,
( SELECT MAX(s.购气量)
FROM 表 s
WHERE s.用户名 = t.用户名
AND s.购气日期 = MAX( t.购气日期 ) ) AS 购气量,
COUNT( t.购气日期 ) AS 购气次数,
SUM( t.购气量 ) AS 购气总量
FROM
表 t
GROUP BY
用户名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种可以使用Group By
select 用户名,max(购气日期) as 购气日期 ,购气量,count(*) 购气次数 as 购气次数,sum(购气量) as 购气总量 from 表名 group by 用户名
select 用户名,max(购气日期) as 购气日期 ,购气量,count(*) 购气次数 as 购气次数,sum(购气量) as 购气总量 from 表名 group by 用户名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
with dd as (select 用户名,
max(购气日期) 购气日期,
count( 用户名) 购气次数,
sum(购气量) 购气总量
from 购气 group by 用户名)
select dd.用户名,dd.购气日期,a.购气量,dd.购气次数,dd.购气总量 from 购气 a ,dd where a.购气日期 =dd.购气日期
max(购气日期) 购气日期,
count( 用户名) 购气次数,
sum(购气量) 购气总量
from 购气 group by 用户名)
select dd.用户名,dd.购气日期,a.购气量,dd.购气次数,dd.购气总量 from 购气 a ,dd where a.购气日期 =dd.购气日期
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询