我在Access中有大表
ID IDParent TimeRecord Value
1 1 00.00.01 10
2 1 00.00.05 12
3 2 00.00.03 4
4 2 00.00.10 4
5 3 00.00.05 5
6 3 00.00.10 6
7 4 00.00.01 100
8 4 00.00.04 110
9 4 00.00.09 120
需要具有IDParent = 4的联合表并与字段TimeRecord同步
结果:
ID IDParent TimeRecord Value ValueIDParent4
1 1 00.00.01 10 100 // 100 because 00.00.01 between 00.00.01 and 00.00.04
2 1 00.00.05 12 110 // 110 because 00.00.05 between 00.00.04 and 00.00.09
3 2 00.00.03 4 100 // 100 because 00.00.03 between 00.00.01 and 00.00.04
4 2 00.00.10 4 120 // 120 because 00.00.10 between 00.00.09 and last
5 3 00.00.05 5 110 // 110 because 00.00.05 between 00.00.04 and 00.00.09
6 3 00.00.10 6 120 // 120 because 00.00.10 between 00.00.09 and last
如何在SQL中获取结果表?
答案 0 :(得分:3)
SELECT t1.ID as ID, t1.IDParent AS IDParent,
t1.TimeRecord AS TimeRecord, t1.Value AS Value,
COALESCE( (SELECT MAX(Value)
FROM MyTable t2
WHERE t2.TimeRecord <= t1.TimeRecord
AND t2.IDParent = 4),
(SELECT MAX(Value) FROM MyTable))
AS ValueIDParent4
FROM MyTable t1
WHERE NOT t1.IDParent = 4
SQLFIDDLE:http://sqlfiddle.com/#!4/472f2/5
我们得到的时间点数比你的时间要低(所以最接近的时间低于你的时间)然后我使用合并功能获得你可以获得的最高点数你的时间太长,无法获得特定数量的分数
更多关于合并的信息:https://msdn.microsoft.com/en-us/library/ms190349.aspx
在Access 2010中,您需要使用函数Nz
SELECT t1.ID as ID, t1.IDParent AS IDParent,
t1.TimeRecord AS TimeRecord, t1.NewValue AS NewValue,
Nz(
(SELECT MAX(NewValue) FROM MyTable t2 WHERE t2.TimeRecord <= t1.TimeRecord AND t2.IDParent = 4),
(SELECT MAX(NewValue) FROM MyTable)
)
AS ValueIDParent4 FROM MyTable t1 WHERE NOT t1.IDParent = 4