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
由于
答案 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;