使用MS Access获取行的第一个实例

时间:2014-07-25 09:06:48

标签: sql ms-access select group-by

编辑:

我有这个查询,其中我想从表 petTable 选择记录的第一个实例。

SELECT id, 
    pet_ID, 
    FIRST(petName), 
    First(Description) 
FROM petTable 
GROUP BY pet_ID;

问题是我有大量的记录,这个查询太慢了。我发现 GROUP BY 会降低查询速度。你有什么想法可以让这个查询更快?或更好的查询,其中我不需要使用 GROUP BY

2 个答案:

答案 0 :(得分:1)

"问题是我有大量的记录,这个查询太慢了。我发现 GROUP BY 会降低查询速度。你有什么想法可以让这个查询更快吗?"

以及pet_ID 上的索引,然后创建并测试此查询:

SELECT pet_ID, Min(id) AS MinOfid
FROM petTable
GROUP BY pet_ID;

一旦你的查询工作,你可以将它连接回原始表 - 然后它将只选​​择基于id匹配的原始行,你可以从那些中检索你想要的其他字段匹配行。

SELECT pt.id, pt.pet_ID, pt.petName, pt.Description
FROM
    petTable AS pt
    INNER JOIN
    ( 
        SELECT pet_ID, Min(id) AS MinOfid
        FROM petTable
        GROUP BY pet_ID
    ) AS sub
    ON pt.id = sub.MinOfid;

答案 1 :(得分:0)

您的查询可能会更改为,

SELECT ID, pet_ID, petName, Description
FROM petTable
WHERE ID IN 
(SELECT Min(ID) As MinID FROM petTable GROUP BY pet_ID);

或使用TOP子句,

SELECT petTable.petID, petTable.petName, petTable.[description]
FROM petTable
WHERE petTable.ID IN
   (SELECT TOP 1 ID                            
   FROM petTable AS tmpTbl                              
   WHERE tmpTbl.petID = petTable.petID        
   ORDER BY tmpTbl.petID DESC) 
ORDER BY petTable.petID, petTable.petName, petTable.[description];