求助,使用SYbase数据库先分组再排序最后取后两条数据的SQL
如图所示,协议号(VERIFYAGRNO),账单号(RPTNO),出单日期(RPTDATE),一个协议号可对应多个账单号,出单日期就是数据生成的日期。
这里需要先根据VERIFYAGRNO分组,再按RPTDATE进行排序最后取排序后的最后两条数据(对应图中的红色框内的数据)。
比如在Oracle中可以使用分析函数ROW_NUMBER()OVER(PARTITION BY 字段1 ORDER BY 字段2 DESC)来实现。
Eg:
SELECT VERIFYAGRNO AS verifyagrno,RPT_NO AS rptNo,RPT_DATE AS rptDate
FROM (
SELECT VERIFYAGRNO,RPT_NO,RPT_DATE,
ROW_NUMBER()OVER(PARTITION BY VERIFYAGRNO ORDER BY RPT_DATE DESC) periodNo
FROM T_CHECK_BILL
WHERE VERIFYAGRNO IN ('121212','131313')
ORDER BY RPT_DATE
)
WHERE periodNo <= 2
但是在Sybase中没有这个分析函数,本人对Sybase不太熟悉,请问各位大师,Sybase中有什么函数或者其他的方式实现吗?
能给出SYbase的SQL语句最好啊,先拜谢了。 你是要选账单号的个数小于等于2的协议号吗? 看你写的那个oracle的语句,感觉写的太复杂,应该有简答的 sybase 没有row_number()函数,可以用如下的方式来实现
SELECT VERIFYAGRNO,RPT_NO,RPT_DATE
FROM T_CHECK_BILL a
where (select count(*) from T_CHECK_BILL b where a. VERIFYAGRNO = b. VERIFYAGRNO and a.RPT_NO < b.RPT_NO) <= 1 回复 2# zhaopingzi
是要分别找出协议号121212和131313对应账单号、出单日期等,但是最近两次插入数据库的,数据在每次插入数据库时会生成出单日期。 回复 4# baiynije
这位大师,你给的SQL能满足我的需求,谢谢您啦。小弟不才,想请教一下这个SQL的执行顺序,或者原理吧,看得有点懵,呵呵。
页:
[1]