MSAccess 数据库中有2个表:
表A
idA,data,idB
表B
idB,idC,data
表A连接表B到idB
我想提取
idA,A.data,A.idB,idC, B.data where B.data>=A.data
如果我获得多行
idA |A.data |A.idB|idC |B.data
1 | 17/04/2016 |1 |2 |19/05/2016
1 | 08/05/2016 |1 |3 |19/05/2016
我想只选择一行,其中A.data 更近到B.data,然后
1 | 08/05/2016 |1 |3 |19/05/2016
答案 0 :(得分:1)
伪代码可能看起来像这样
select Top 1 ...
from ...
where B.data<=A.data
Order by datetime difference between B.data and A.data asc
答案 1 :(得分:1)
对于您的数据集,看起来您想要做的是:
B.data
的任何给定值,有一个或多个A.data
值的组A.data<=B.data
。A.data
值组,您对该组中只有一个 A.data
值感兴趣:最接近{{1}的值该组的值。所以,让我们考虑一下我们正在寻找的东西。在组行中,我们只对感兴趣。这表明我们正在寻找类似于B.data
等聚合函数的内容或SUM()
,它采用一组值,执行计算,并返回一个值。
MAX()
和SUM()
的问题在于它们只允许您使用(并返回)单个标量值,但我们可以使用相关子查询添加一点复杂性强>,像这样:
MAX()
这种方法的一个潜在问题是,如果有多个具有相同日期的A.data值,您可能会获得这些值中的任何一个,除非您在其中应用其他订购子查询。
答案 2 :(得分:0)
测试:
表A
count
表B
ida data idB
1 19/05/2016 10
与
idB idC data
10 13 08/05/2016
10 51 17/04/2016
我得到了
select B.*,
(select top 1 A.idA from A where A.data<=B.data order by A.data) as
closestA_ID from B
但我只搜索一行:
idB idC data closestA_ID
10 51 17/04/2016
10 13 08/05/2016
我错过了什么?