想象一下我有两张桌子(见图)。在一个中,我有日期,在另一个中,我计算了第一个日期中的一些日期。
我需要加入这些表,因此我对表 Dates 中的每个日期都有最新的计数(截至该日期)。例如,对于 [Dates].[date]=3,我没有 [Counts].[Count],因此我必须计算 [date]=1。
在 SQL 中执行此操作的最佳方法是什么?
我希望你能理解我:)
谢谢!!
想象一下我有两张桌子(见图)。在一个中,我有日期,在另一个中,我计算了第一个日期中的一些日期。
我需要加入这些表,因此我对表 Dates 中的每个日期都有最新的计数(截至该日期)。例如,对于 [Dates].[date]=3,我没有 [Counts].[Count],因此我必须计算 [date]=1。
在 SQL 中执行此操作的最佳方法是什么?
我希望你能理解我:)
谢谢!!
您可以使用它LEFT JOIN
来执行此操作;使用带有空检查的额外左连接以确保不存在更新的匹配日期;
SELECT d.`date`, c.`count`
FROM dates d
LEFT JOIN counts c ON d.`date` >= c.`date`
LEFT JOIN counts c2 ON d.`date` >= c2.`date` AND c.`date`<c2.`date`
WHERE c2.`date` IS NULL;
您也可以使用相关子查询来执行此操作:
select d.date,
(select c.count
from counts c
where d.date >= c.date
order by c.date desc
limit 1
) as count
from dates d;
如果你有一个索引,这甚至应该是相对有效的counts(date, count)
。