求助:查询最大集合-发票查询

abcspy 2015-05-17 11:01:54
id qyhm fpdm fpqh sl bz
1 9550251 19550251001 00010001 50 0
2 9550251 19550251001 00010041 10 1
3 9550251 19550251001 00010041 10 0
4 9550252 19550251001 00090001 100 0
5 9550252 19550251001 00090051 50 1
6 9550252 19550251001 00090051 50 0
7 9550253 19550251002 00010001 100 0
8 9550253 19550251002 00010035 50 1
9 9550253 19550251002 00010035 50 0
10 9550251 19550251001 00020001 50 0
11 9550251 19550251001 00020031 20 1
12 9550251 19550251001 00020031 20 0
可从上表中得到发票止号:fpqh+sl-1=fpzh
查询结果为:(查询同一"qyhm",同一“fpdm”,起始号"fpqh",数量“sl”最大的,bz=0为出,bz=1为退)
qyhm fpdm fpqh fpzh sl bz
9550251 19550251001 00010001 00010050 50 0
9550252 19550251001 00090001 00090100 100 0
9550253 19550251002 00010001 00010100 100 0
9550251 19550251001 00020001 00020050 50 0

选出结果目标为fpqh-fpzh集合中,最大的
如:
10 9550251 19550251001 00020001 50 0
11 9550251 19550251001 00020031 20 1
11行数据在10行之中,查出结果为比11行大的10行
...全文
156 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcspy 2015-05-24
  • 打赏
  • 举报
回复
“1、2、3行和10、11、12行"qyhm",“fpdm”是一样的嘛。” 是一样的,表示同一类发票代码。
引用 1 楼 qq_27931103 的回复:
1、2、3行和10、11、12行"qyhm",“fpdm”是一样的嘛。 按你这个数据是不是测试数据写错了。 如果不一样。 select a1.* from (select a.*, row_number()over(partition by qyhm,fpdm order by sl desc) rn from table a ) a1 where rn = 1
你的方法是选第一个,实际上还存在一个加减关系。 如果不存在退回第8行后第9行发售出去的数据: 9 9550253 19550251002 00010035 50 0 结果就会变成两段实际发售数据为: 9550253 19550251002 00010001 34 0 9550253 19550251002 00010085 16 0 同几个朋友讨论一下,用好像有oracle没有较好的方法,后改有编程来解决。但仍希望有好的语句来实现。
qq_27931103 2015-05-22
  • 打赏
  • 举报
回复
1、2、3行和10、11、12行"qyhm",“fpdm”是一样的嘛。 按你这个数据是不是测试数据写错了。 如果不一样。 select a1.* from (select a.*, row_number()over(partition by qyhm,fpdm order by sl desc) rn from table a ) a1 where rn = 1

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧