SQL更新每个记录及其在有序选择中的位置

时间:2010-02-24 16:15:34

标签: sql ms-access oledb

我正在通过OleDb使用Access。我有一个包含列ID,GroupID,时间和地点的表。应用程序将新记录插入表中,遗憾的是,Place未正确计算。

我想根据时间的推移更新组中每个记录的正确位置。

假设以下数据:

ID     GroupId  Time   Place
Chuck  1        10:01  2
Alice  1        09:01  3
Bob    1        09:31  1

应该导致:

ID     GroupId  Time   Place
Chuck  1        10:01  3
Alice  1        09:01  1
Bob    1        09:31  2

我可以使用游标提出解决方案,但在Access中无法实现AFAIK。

2 个答案:

答案 0 :(得分:2)

我刚刚搜索了“在Access中排名”,我得到了this support.microsoft result

您似乎使用具有以下表达式的字段创建查询:

Place: (Select Count(*) from table1 Where [Time] < [table1alias].[Time]) + 1

我无法测试,所以我希望它有效。 您可以这样做(queryAbove是上述查询):

UPDATE table1
SET [Place] = queryAbove.[Place]
FROM queryAbove
WHERE table1.ID = queryAbove.ID

这是一个很长的镜头,但请你试一试。

答案 1 :(得分:0)

我认为时间不是数字或时间格式的列,不幸的是,时间是包含时间格式的数字和稀释的文本字符串。这就是为什么在时间列之后进行排序是非法的。删除dilimiters“:”和“,”转换为整数然后按照numirically排序可以完成这项工作