hive/sql 排序

alu.alu 2018-05-21 12:46:55
情景:有A和B两个表,都只含有id和time两个字段,其中A表有100条数据,B表有10000条数据。
问题:现在想提取time排在前10001的共10001条记录,问(1)第一条B之前有几个A (2)第一个和第二个B之间有几个A (3)第N和和第N+1个B之间有几个A (4)第10000个B之后有几个A
条件:如果有两个A的time与第N个B的time一样,那么这两条A记录在第N个B和第N+1个B之间
...全文
1040 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
alu.alu 2018-05-21
  • 打赏
  • 举报
回复
追加一个问题哈~如果要求hive的执行复杂度是10000而不是1000000呢?如何操作?
alu.alu 2018-05-21
  • 打赏
  • 举报
回复
回复二楼: 您好,请问如何体现“如果有两个A的time与第N个B的time一样,那么这两条A记录在第N个B和第N+1个B之间”呢?
正怒月神 2018-05-21
  • 打赏
  • 举报
回复
我的思路大概如下,主要是先存储通过union all合并2个表, 然后设置一个RID作为总的id,然后A和B各自有CRID 作为子id,并且防止了一个标记用来表名该行属于哪个表 select ROW_NUMBER() OVER (ORDER BY A.ID ASC) RID,* from ( select ROW_NUMBER() OVER (ORDER BY A.ID ASC) CRID, A.ID,A.TIME,'A' 标记 from A union all select ROW_NUMBER() OVER (ORDER BY B.ID ASC) CRID, B.ID,B.TIME,'B' 标记 from B ) TAB 放到临时表。 (1) select count(*) from TAB where RID<(select RID from TAB where TAB.标记='B' and TAB.CRID=1) and TAB.标记='A' (2) select count(*) from TAB where RID between (select RID from TAB where TAB.标记='B' and TAB.CRID=1) and (select RID from TAB where TAB.标记='B' and TAB.CRID=2) and TAB.标记='A' (3) 同上 (4) select count(*) from TAB where RID>(select RID from TAB where TAB.标记='B' and TAB.CRID=10000) and TAB.标记='A'

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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