【问题标题】:Get the first instance of a row using MS Access使用 MS Access 获取行的第一个实例
【发布时间】:2014-09-17 02:07:08
【问题描述】:

已编辑:

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

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

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

【问题讨论】:

  • 你的表没有主键吗?如果 pet_ID 是主键,则无需使用 First,因为同一宠物的记录不应超过 1 条。
  • @paulFrancis,我刚刚更新了我的帖子。假设我有 id 作为主键,而 pet_id 可能在表中出现多次
  • 使用 DISTINCT 也会使查询太慢

标签: sql ms-access select group-by


【解决方案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;

【讨论】:

    【解决方案2】:

    您的查询可能会更改为,

    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];
    

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 2021-04-23
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多