sql - 如何根据最近的日期将值归因于行
问题描述
我正在尝试根据最接近的 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)
最右边的表是我想要实现的:
有人对如何获得我的预期结果有任何建议吗?(图片最右边的表格)
如果有人有兴趣帮忙,我在这里有一个 SQL 小提琴。
解决方案
t1
需要与自身进行比较才能找到所属的t1
行t2
。这样做你需要加入t1
两次。您可以将一个子选择用于测试是否存在更合适的 t1 到 an 的条件中OUTER JOIN
,如下所示:
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
推荐阅读
- java - 以秒为单位添加时区的转换后的 unix 时间戳在 Android 模拟器上提供了真正的本地日期时间,但在真实设备中却没有?
- html - 如何在图像响应式顶部制作文本块?
- android - 带有 FragmentContainerView 的 Null NavHostFragment/NavController
- c++ - 使用 LoadToolbarEx 解决异常以及正常与大图像计数之间的差异
- c - 在带有位域的结构中使用带有位域的结构?
- oracle - SQL Developer 不显示 XML
- vba - 在文档中按文件路径插入图片以匹配通用名称 MS Access VBA 的数百页
- android - 闪屏中的闪屏
- c# - Xamarin Forms iOS IsSpellCheckEnabled 不起作用
- bash - 使用 xargs 运行多个命令 - for 循环