如何根据最近的日期为行赋值

3

我正在尝试根据最接近的run_date向一行分配“收入”值,向时间前方寻找。 我使用日期范围作为连接条件,仅连接在10天“展望”期内的行与以下内容。

SELECT 
* 
FROM t1 
  INNER JOIN t2 ON t1.id = t2.id 
  AND t2.date BETWEEN t1.run_date AND DATE_ADD(t1.run_date, INTERVAL 10 DAY)

我想要实现的是最右边的表格:

enter image description here

有没有人能给我一些建议,告诉我如何得到我想要的结果?(图像中最右边的表格)

如果有人有兴趣帮忙,这里有一个SQL fiddle链接


在MySQL 8中,使用Lateral Join可以轻松解决这个问题,虽然并不是特别有用。 - Stu
由于SQL包括数据定义,因此[mcve]应在问题本身中包含用于示例表的DDL语句和用于示例数据的DML语句。请注意,在问题中添加现场示例链接以及有代码是可以的。请参阅帮助中心以获取更多关于如何提出好问题和其他许多有用主题。 - outis
不应该使用图片来传达文本数据。 - outis
1个回答

1

t1需要与自身进行比较,以找到t2所属的t1行。为了做到这一点,您需要两次加入t1。您可以将子选择放入OUTER JOIN的条件中以测试是否存在更合适的t1:

SELECT 
t1.id, c_id, run_date, coalesce(revenue,0) revenue
FROM t1 
  LEFT OUTER JOIN t2 ON t1.id = t2.id 
  AND t2.date BETWEEN t1.run_date AND DATE_ADD(t1.run_date, INTERVAL 10 DAY)
  AND NOT EXISTS (
    SELECT 'X'
    FROM t1 as later
    WHERE t1.id = t2.id
    AND later.run_date < t2.date
    AND t1.run_date < later.run_date
)
ORDER BY run_date

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接