为同一用户选择上一行值(多条记录)

时间:2015-03-03 15:52:04

标签: sql ms-access ms-access-2010

我在Access 2010中有一个查询(也曾在2013年试过,结果相同),但是对所有记录都有效但不完美。我想知道是否有人知道导致错误的原因。

以下是查询(改编自http://allenbrowne.com/subquery-01.html#AnotherRecord):

SELECT t_test_table.individ, t_test_table.test_date, t_test_table.score1, (SELECT top 1 Dupe.score1                 
    FROM t_test_table AS Dupe                     
    WHERE Dupe.individ = t_test_table.individ 
      AND Dupe.test_date < t_test_table.test_date  
ORDER BY Dupe.primary DESC, Dupe.individ
) AS PriorValue, [score1]-[priorvalue] AS scorechange
FROM t_test_table;

数据的设置方式,个人在文件中有多个记录(由个人指定),代表测试的不同日期。日期和个人组合是独一无二的 - 您只能进行一次测试。 [primary]指主键列。我之所以这样做,是因为个别字段不是主键,因为倍数是可能的(由于空格我不在此处)

上述代码的目标是创建以下内容:

individ test_date   score1  PriorValue  scorechange 
1       3/1/2013    40      
1       6/4/2013    51            40    11
1       7/25/2013   55            51    4
1      12/13/2013   59            55    4
5      8/29/2009    39      
5      12/9/2009    47            39    8
5       6/1/2010    58            47    11
5       8/28/2010   42            58    -16
5      12/15/2010   51            42    9

这是我实际得到的。你可以看到,对于个体1,它最终取得每个后续记录的第一个分数而不是之前的分数。对于个体5来说,它有点有效,但最终的先验值应该是42而不是58.

individ test_date   score1  PriorValue  scorechange 
1       3/1/2012    40      
1       6/4/2012    51            40    11
1       7/25/2012   55            40    15
1      12/13/2012   59            40    19
5      8/29/2005    39      
5      12/9/2005    47            39    8
5       6/1/2006    58            47    11
5       8/28/2006   42            58    -16
5      12/15/2006   51            58    -7

有没有人对这里出了什么问题有任何想法?在其他记录中,它完美地工作,但我无法确定是什么导致某些记录未能采用之前的值。感谢任何帮助,如果您需要其他信息,请告诉我。

1 个答案:

答案 0 :(得分:2)

要获得针对特定个人的最新测试,您需要按日期排序。在内部查询中,替换

ORDER BY Dupe.primary DESC, Dupe.individ

ORDER BY Dupe.test_date DESC

很难确切地说primary排序的效果是什么,因为您还没有告诉我们您如何生成primary的值。如果individtest_date的组合保证是唯一的,您可能需要将making the two of them考虑​​到主键中而不是创建新内容。 Dupe.individ行中的ORDER BY无效,因为您的WHERE子句已将内部查询的结果限制为一个人。