如何根据参考 table 上的最近日期在加入中生成每日分数

How to generate daily score in join based on most recent date on reference table

SQL Vertica 问题(但欢迎任何 SQL 查询答案) 我有一个 table "Base" 目前处于 "day-url" 级别,我尝试通过加入 "day-url" 每天为每个 url 获得 'score'水平参考 table "Score Update"。问题是参考 table 不是每天而是特定日期级别。我需要在 "Base" 中的 "Date" 之前加入 "Score Update" 和 "Update Date" 的乐谱。示例如下:(请看底部图片)

我有:(基础)

Date          URL   Score                      
2019-08-01    A                        
2019-08-01    B                                      
2019-08-02    A                                 
2019-08-03    A                                  
2019-08-09    B         
2019-08-10    A         
2019-08-11    A          
2019-08-11    B      
2019-08-13    B

(分数更新)

Update_Date      URL    Score
 2019-07-25      A       x
 2019-07-25      B       y
 2019-08-10      A      alpha
 2019-08-10      B      beta

我想要的是: 我有什么:(基础)

Date            URL   Score             
2019-08-01      A      x                    
2019-08-01      B      y                      
2019-08-02      A      x                           
2019-08-03      A      x                             
2019-08-09      B      y   
2019-08-10      A      alpha   
2019-08-11      A      alpha    
2019-0B-11      B      beta 
2019-08-13      B      beta

enter image description here

并且两个 table 都将继续更新未来的日期数据。任何人都可以帮助我如何加入这 2 tables 吗?

谢谢!

你是这个意思吗?

WITH
-- your input ...
base(dt,url,score) AS (
          SELECT DATE '2019-08-01','A',NULL
UNION ALL SELECT DATE '2019-08-01','B',NULL
UNION ALL SELECT DATE '2019-08-02','A',NULL
UNION ALL SELECT DATE '2019-08-03','A',NULL
UNION ALL SELECT DATE '2019-08-04','B',NULL
UNION ALL SELECT DATE '2019-08-05','A',NULL
UNION ALL SELECT DATE '2019-08-06','A',NULL
UNION ALL SELECT DATE '2019-08-10','A',NULL
UNION ALL SELECT DATE '2019-08-11','A',NULL
UNION ALL SELECT DATE '2019-08-11','B',NULL
UNION ALL SELECT DATE '2019-08-12','A',NULL
UNION ALL SELECT DATE '2019-08-13','A',NULL
)
,
-- your input ...
score_upd(upd_dt,url,score) AS (
          SELECT DATE '2019-07-25','A','x'
UNION ALL SELECT DATE '2019-07-25','B','alpha'
UNION ALL SELECT DATE '2019-08-10','A','y'
UNION ALL SELECT DATE '2019-08-10','B','beta'
)
-- real select starts here ..                                     
SELECT
  b.dt
, b.url
, u.score
FROM base b
LEFT JOIN score_upd u
  ON b.url=u.url
 AND b.dt INTERPOLATE PREVIOUS VALUE u.upd_dt
ORDER BY dt,url
;
-- out      dt     | url | score 
-- out ------------+-----+-------
-- out  2019-08-01 | A   | x
-- out  2019-08-01 | B   | alpha
-- out  2019-08-02 | A   | x
-- out  2019-08-03 | A   | x
-- out  2019-08-04 | B   | alpha
-- out  2019-08-05 | A   | x
-- out  2019-08-06 | A   | x
-- out  2019-08-10 | A   | y
-- out  2019-08-11 | A   | y
-- out  2019-08-11 | B   | beta
-- out  2019-08-12 | A   | y
-- out  2019-08-13 | A   | y
-- out (12 rows)