查询使用order by和<从两个表中获取数据操作者

时间:2017-12-08 05:51:47

标签: oracle

SQL大师 - 我需要一些帮助

Table A ( number , name , subject , col 4 )
Table B ( number , name , subject , col 4 , col 5 etc )

对于表A中的每一行,我想要表B中的以下行:

(a.name = b.name
a.subject = b.subject
b.number < a.number) order by desc and rownum = 1

基本上是表B中的行,其数值与表A中的数字值相对应。

Table A ( 3 rows )
20171208001735 xxx username1
20171208004123 yyy username1
20171209053231 xxx username2

Table B ( n rows )
20171209083227 yyy username2 
20171209083216 aaa username2 
20171209053142 xxx username2 <---- tag to row 3 from Table A 
20171209025647 yyy username1 
20171209002611 bbb username1 
20171209002609 ccc username1 
20171208002602 yyy username1 <---- tag to row 2 from table A 
20171209002315 ddd username1 
20171209002302 ggg username1 
20171208001523 xxx username1 <---- tag to row 1 from table A 
20171209001806 zzz username1

由于

1 个答案:

答案 0 :(得分:0)

这里的一种方法是使用您提到的条件在两个表之间执行连接,然后引入ROW_NUMBER以查找表A中每个记录的单个感兴趣的记录。匹配的条件,因为A数字严格大于B数,是我们想要B表中最高的数字。因此ROW_NUMBER中的排序由B编号按降序给出。

SELECT *     -- this can be replaced with an actual list of columns you want
FROM
(
    SELECT a.*, b.*,
        ROW_NUMBER() OVER (PARTITION BY a.name, a.subject ORDER BY b.number DESC) rn
    FROM tableA a
    LEFT JOIN tableB b
        ON a.name = b.name AND
           a.subject = b.subject AND
           a.number > b.number
) t
WHERE t.rn = 1;