想象我有两张桌子(见图)。在一个我有约会,在另一个我有一个计数在第一个日期。
我需要加入这些表,所以我对表中的每个日期都有最新的计数(截至该日期)。 例如,对于[日期]。[日期] = 3我没有[计数]。[计数],所以我必须计算[日期] = 1。
在SQL中执行此操作的最佳方法是什么?
我希望你能理解我:)。
谢谢!
答案 0 :(得分:5)
您可以使用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;
答案 1 :(得分:1)
您也可以使用相关子查询来执行此操作:
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)
的索引,那么这甚至应该相对有效。