2

想象一下我有两张桌子(见图)。在一个中,我有日期,在另一个中,我计算了第一个日期中的一些日期。

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

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

我希望你能理解我:)

谢谢!!

在此处输入图像描述

4

2 回答 2

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;

一个用于测试的 SQLfiddle

于 2013-08-16T13:58:08.063 回答
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)

于 2013-08-16T14:35:28.807 回答