SQL连接不完整的表

时间:2013-08-16 13:50:43

标签: mysql sql sql-server performance

想象我有两张桌子(见图)。在一个我有约会,在另一个我有一个计数在第一个日期。

我需要加入这些表,所以我对表中的每个日期都有最新的计数(截至该日期)。 例如,对于[日期]。[日期] = 3我没有[计数]。[计数],所以我必须计算[日期] = 1。

在SQL中执行此操作的最佳方法是什么?

我希望你能理解我:)。

谢谢!

enter image description here

2 个答案:

答案 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;

An SQLfiddle to test with

答案 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)的索引,那么这甚至应该相对有效。