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
展开
 我来答
胖鱼鱼4Q
2014-11-30 · TA获得超过222个赞
知道答主
回答量:104
采纳率:0%
帮助的人:79.7万
展开全部

原始数据:

莫非你要的结果是这样的结果:

我用的是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)
c6iz
2014-10-27 · TA获得超过1417个赞
知道大有可为答主
回答量:1426
采纳率:100%
帮助的人:1050万
展开全部

可以使用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;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
雨a心竹
2014-10-27 · TA获得超过206个赞
知道小有建树答主
回答量:261
采纳率:0%
帮助的人:148万
展开全部
有一个思路,看看行不行。
把同一个客户ID的结果放进一张临时表,每次都按照时间降序select最前面3条,然后删除第一条,循环做完。
外部再对客户ID循环。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式