我有一个我想写的sqlite查询。我有两张桌子:
TableA(销售): ID 销售 日期
表B(目标): ID 目标 日期
我从TableA中选择如下: SELECT id,sales,date FROM TableA
现在到了“棘手”的部分。我需要将TableB连接到查询,因为我需要TableA中TableB 中的每一行的目标字段。 TableB仅包含某些日期的目标,而 TableA包含所有日期。所以我不能只使用TableA.date = TableB.date
相反,对于TableA中的每一行,我需要将TableB中的目标从过去最接近的日期到TableA中的日期。希望我能够解释我需要什么。无法弄清楚该怎么做..
答案 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是否支持这一点,很难。