先看表里的测试数据:
NAME DT VAL
A 2008-06-17 10
A 2008-06-16 09
A 2008-06-15 08
A 2008-06-14 06
A 2008-06-13 -1
A 2008-06-12 07
A 2008-06-11 13
B 2008-06-17 10
B 2008-06-16 09
B 2008-06-15 0
B 2008-06-14 02
B 2008-06-13 -1
B 2008-06-12 07
B 2008-06-11 10
C 2008-06-17 0
C 2008-06-16 09
C 2008-06-15 0
C 2008-06-14 06
C 2008-06-13 225
C 2008-06-12 150
C 2008-06-11 100
可能要求进行的查询和期望得到的结果如下:
1.查询在连续N天里val值大于M的员工及其相应的记录
如要求查询连续4天val值大于05则应该返回:
A 2008-06-17 10
A 2008-06-16 09
A 2008-06-15 08
A 2008-06-14 06
C 2008-06-14 06
C 2008-06-13 165
C 2008-06-12 150
C 2008-06-11 100
或各组答案中最接近今天的那条记录:
A 2008-06-17 10
C 2008-06-14 06
2.查询在连续N天里val值每天递增M的员工及其相应的记录
如要求查询连续3天里val值每天增加1的员工则应该返回:
A 2008-06-17 10
A 2008-06-16 09
A 2008-06-15 08
或各组答案中最接近今天的那条记录:
A 2008-06-17 10
3.查询在连续N天里val值每天递增M%的员工及其相应的记录
如要求查询连续3天里val值每天增加50%的员工则应该返回:
C 2008-06-13 225
C 2008-06-12 150
C 2008-06-11 100
或各组答案中最接近今天的那条记录:
C 2008-06-13 225
这种类型的查询是否能只使用access(允许使用中间表和access的VBA)解决而不需借助其它编程语言编程进行分析?
希望各位踊跃发表意见。。。。
SELECT T.NAME, T.DT, T.VAL, T1.VAL, T2.VAL, T3.VAL
FROM (SELECT T.NAME, [DT]+3 AS D3, T.VAL
FROM T) AS T3 INNER JOIN ((SELECT T.NAME, [DT]+2 AS D2, T.VAL
FROM T) AS T2 INNER JOIN ((SELECT T.NAME, [DT]+1 AS D1, T.VAL
FROM T) AS T1 INNER JOIN T ON (T1.D1 = T.DT) AND (T1.NAME = T.NAME)) ON (T2.D2 = T.DT) AND (T2.NAME = T.NAME)) ON (T3.D3 = T.DT) AND (T3.NAME = T.NAME)
WHERE (((T.VAL)>=[M]) AND ((T1.VAL)>=[M]) AND ((T2.VAL)>=[M]) AND ((T3.VAL)>=[M]));