日期關聯取最近日期的SQL


SQL怎么關聯,如下圖A表用日期加產品編號關聯B表的時候,如果日期不存在,則取之前最近一個日期的值,比如A表2012-07-31 關聯B表,B表沒有對應日期的,就取2012-07-30的

A表

     

B表

   

日期

產品編號

值1

 

日期

產品編號

值1

 

 

 

 

2012-7-30

F003003

11

2012-7-31

F003003

1

 

 

 

 

2012-8-1

F003003

2

 

2012-8-1

F003003

12

2012-8-2

F003003

3

 

2012-8-2

F003003

13

2012-8-3

F003003

4

 

2012-8-3

F003003

14

2012-8-4

F003003

5

 

 

 

 

2012-8-5

F003003

6

 

 

 

 

2012-8-6

F003003

7

 

2012-8-6

F003003

15

2012-8-7

F003003

8

 

2012-8-7

F003003

16

2012-8-8

F003003

9

 

2012-8-8

F003003

17

2012-8-9

F003003

10

 

2012-8-9

F003004

18

             
             

結果

           

日期

產品編號

值1

 

 

 

值2

2012-7-31

F003003

1

 

2012-7-30

F003003

11

2012-8-1

F003003

2

 

2012-8-1

F003003

12

2012-8-2

F003003

3

 

2012-8-2

F003003

13

2012-8-3

F003003

4

 

2012-8-3

F003003

14

2012-8-4

F003003

5

 

2012-8-3

F003003

14

2012-8-5

F003003

6

 

2012-8-3

F003003

14

2012-8-6

F003003

7

 

2012-8-6

F003003

15

2012-8-7

F003003

8

 

2012-8-7

F003003

16

2012-8-8

F003003

9

 

2012-8-8

F003003

17

2012-8-9

F003003

10

 

2012-8-9

F003004

18

           

 

 

 

SELECT * FROM (
SELECT a.done_date,a.done_code,a.ext,
last_value(b.done_date IGNORE NULLS) over(ORDER BY nvl(b.done_date,a.done_date)) bdone_date,
last_value(b.done_code IGNORE NULLS) over(ORDER BY nvl(b.done_date,a.done_date)) bdonecode,
last_value(b.ext IGNORE NULLS) over(ORDER BY nvl(b.done_date,a.done_date)) bext
FROM a FULL JOIN b
ON a.done_date=b.done_date
AND a.done_code=b.done_code
) WHERE done_date IS NOT NULL
/

DONE_DATE DONE_CODE        EXT BDONE_DATE BDONECODE       BEXT
----------- ---------- ---------- ----------- ---------- ----------
2012-07-31 F003003          1 2012-07-30 F003003         11
2012-08-01 F003003          2 2012-08-01 F003003         12
2012-08-02 F003003          3 2012-08-02 F003003         13
2012-08-03 F003003          4 2012-08-03 F003003         14
2012-08-04 F003003          5 2012-08-03 F003003         14
2012-08-05 F003003          6 2012-08-03 F003003         14
2012-08-06 F003003          7 2012-08-06 F003003         15
2012-08-07 F003003          8 2012-08-07 F003003         16
2012-08-08 F003003          9 2012-08-08 F003003         17
2012-08-09 F003003         10 2012-08-09 F003003         18

10 rows selected


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM