oracle 一个困扰很久的sql问题,求大神帮忙 70
有一个表,其中几个字段是客户ID,时间和使用水量,我想求同一客户番号下,每条数据,距离最近的3个时间的水量,将这3个时间和水量,作为这条数据的字段,请问如何做,谢谢大家时...
有一个表,其中几个字段是客户ID,时间和使用水量,我想求同一客户番号下,每条数据,距离最近的3个时间的水量,将这3个时间和水量,作为这条数据的字段,请问如何做,谢谢大家
时间 使用水量 客户ID
2014年1月 100m3 1
2013年12月 110m3 1
2013年11月 120m3 1
2013年10月 130m3 1
2013年09月 140m3 2
-----------------------------------------------------
客户ID 时间 1 使用水量1 时间 2 使用水量2 时间3 使用水量3
1 2014年1月 100m3 2013年12月 110m3 2013年11月 120m3
1 2013年12月 110m3 2013年11月 120m3 2013年10月 130m3
1 2013年11月 120m3 2013年10月 130m3
1 2013年10月 130m3
2 2013年09月 140m3 展开
时间 使用水量 客户ID
2014年1月 100m3 1
2013年12月 110m3 1
2013年11月 120m3 1
2013年10月 130m3 1
2013年09月 140m3 2
-----------------------------------------------------
客户ID 时间 1 使用水量1 时间 2 使用水量2 时间3 使用水量3
1 2014年1月 100m3 2013年12月 110m3 2013年11月 120m3
1 2013年12月 110m3 2013年11月 120m3 2013年10月 130m3
1 2013年11月 120m3 2013年10月 130m3
1 2013年10月 130m3
2 2013年09月 140m3 展开
展开全部
原始数据:
莫非你要的结果是这样的结果:
我用的是SQL Server数据库,如果是你要的结果,下面是代码:
SELECT A.UserID as '客户ID',
Convert(varchar(4),YEAR(A.WaMonth))+'年'+Convert(varchar(2),MONTH(A.WaMonth))+'月' as '时间1',
A.WaterVolume as '使用水量1',
Convert(varchar(4),YEAR(B.WaMonth))+'年'+Convert(varchar(2),MONTH(B.WaMonth))+'月' as '时间2',
B.WaterVolume as '使用水量2',
Convert(varchar(4),YEAR(C.WaMonth))+'年'+Convert(varchar(2),MONTH(C.WaMonth))+'月' as '时间3',
C.WaterVolume as '使用水量3'
FROM WaterApply A
LEFT JOIN WaterApply B ON B.UserID=A.UserID
AND Convert(varchar(6),dateadd(month,1,B.WaMonth),112)=Convert(varchar(6),A.WaMonth,112)
LEFT JOIN WaterApply C ON C.UserID=A.UserID
AND Convert(varchar(6),dateadd(month,2,C.WaMonth),112)=Convert(varchar(6),A.WaMonth,112)
展开全部
可以使用row_number() 函数,使用分组排序,并且使用case选出序号1,2,3
可以参考以下SQL
SELECT fundtype,max(case when rw=1 then addtime end) addtime ,max(case when rw=2 then id end) addtime
FROM
(SELECT row_number() over(partition by fundtype order by addtime ) rw,
fundtype,addtime,id FROM F_207445 ) a
GROUP BY fundtype;
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有一个思路,看看行不行。
把同一个客户ID的结果放进一张临时表,每次都按照时间降序select最前面3条,然后删除第一条,循环做完。
外部再对客户ID循环。
把同一个客户ID的结果放进一张临时表,每次都按照时间降序select最前面3条,然后删除第一条,循环做完。
外部再对客户ID循环。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询