我有一个这样的数据表:
id user_id A B C
=====================
1 15 1 2 3
2 15 1 2 5
3 20 1 3 9
4 20 1 3 7
我需要删除重复的用户ID并保留在按A然后B然后C排序时排序最低的记录。因此,使用上面的表格,我设置了一个临时查询(qry_temp),它只是排序 - 首先是user_id,然后是A,然后是B,然后是C.它返回以下内容:
id user_id A B C
====================
1 15 1 2 3
2 15 1 2 5
4 20 1 3 7
3 20 1 3 9
然后我写了一个基于qry_temp的Totals Query,它只有user_id(Group By)然后是id(First),我认为这会返回以下内容:
user_id id
===========
15 1
20 4
但它似乎没有这样做 - 相反它似乎只是返回一组重复用户ID中的最低id(所以我得到1和3而不是1和4)。 Totals查询不应该使用它所基于的查询顺序吗?查询中是否存在可能影响此属性或其他方式的属性设置以获得我需要的内容?如果有帮助,这里是SQL:
SELECT qry_temp.user_id, First(qry_temp.ID) AS FirstOfID
FROM qry_temp
GROUP BY qry_temp.user_id;
答案 0 :(得分:2)
您需要不同类型的查询,例如:
SELECT tmp.id,
tmp.user_id,
tmp.a,
tmp.b,
tmp.c
FROM tmp
WHERE (( ( tmp.id ) IN (SELECT TOP 1 id
FROM tmp t
WHERE t.user_id = tmp.user_id
ORDER BY t.a,
t.b,
t.c,
t.id) ));
其中tmp是表的名称。 First,Last,Min和Max不依赖于排序顺序。在关系数据库中,排序顺序非常短暂。