在MySQL中加入过去最近的日期表

时间:2010-07-20 14:53:06

标签: sql date join

我有一个我想写的sqlite查询。我有两张桌子:

TableA(销售): ID 销售 日期

表B(目标): ID 目标 日期

我从TableA中选择如下: SELECT id,sales,date FROM TableA

现在到了“棘手”的部分。我需要将TableB连接到查询,因为我需要TableA中TableB 中的每一行的目标字段。 TableB仅包含某些日期的目标,而 TableA包含所有日期。所以我不能只使用TableA.date = TableB.date

相反,对于TableA中的每一行,我需要将TableB中的目标从过去最接近的日期到TableA中的日期。希望我能够解释我需要什么。无法弄清楚该怎么做..

3 个答案:

答案 0 :(得分:9)

SELECT a.id, a.sales, a.date, (SELECT TOP 1 Goal 
                               FROM TableB b WHERE b.date < a.date
                               ORDER BY b.date DESC) As Goal
FROM TableA a

离开最近的日期。

答案 1 :(得分:1)

“完全相等的日期”将是日期字段上的联接。 (如Ash的回答)

“最近的约会”应该读取“未来最近的日期”或“过去的最近日期”(或许不是)。在这种情况下,您可以使用带有WHERE语句的子查询来比较日期(&lt;或&gt;)

如果“最近的日期”既有过去也有现在,我可能通过编写一个存储过程来编写它,该存储过程为表A中的每个日期创建一个包含最相关的“近日期”(从B)的帮助表。通过这种方式,我可以更好地控制程序的行为,并且将来更容易更改。

性能优化总是可以在以后进行。

答案 2 :(得分:0)

只需获取笛卡尔积,然后过滤掉不感兴趣的行。基本上是:

select a.*, b.*
from a, b
where
not exists (
  select null
  from b b2
  where abs(b2.date - a.date) < abs(b.date - a.date)
)

我不知道SQLite是否支持这一点,很难。