我在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
有没有人对这里出了什么问题有任何想法?在其他记录中,它完美地工作,但我无法确定是什么导致某些记录未能采用之前的值。感谢任何帮助,如果您需要其他信息,请告诉我。
答案 0 :(得分:2)
要获得针对特定个人的最新测试,您需要按日期排序。在内部查询中,替换
ORDER BY Dupe.primary DESC, Dupe.individ
带
ORDER BY Dupe.test_date DESC
很难确切地说primary
排序的效果是什么,因为您还没有告诉我们您如何生成primary
的值。如果individ
和test_date
的组合保证是唯一的,您可能需要将making the two of them考虑到主键中而不是创建新内容。 Dupe.individ
行中的ORDER BY
无效,因为您的WHERE
子句已将内部查询的结果限制为一个人。