从Access中的表中的联合字段表

时间:2015-05-08 08:42:57

标签: sql ms-access

我在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中获取结果表?

1 个答案:

答案 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