本帖最后由 yangmijun 于 2011-11-10 19:42:47 编辑

解决方案 »

  1.   

    用row_number函数又快又方便
    SELECT   product_id,
             LEN,
             Width,
             Height
      FROM   (SELECT   product_id,
                       LEN,
                       Width,
                       Height,
                       ROW_NUMBER ()
                          OVER (PARTITION BY LEN, Width, Height
                                ORDER BY product_id desc )
                          rn
                FROM   tab1)
     WHERE   rn = 1
      

  2.   

    1楼的over中不应当加order by,加了order by product_id desc得到的就不是第1条记录了,而是product_id最大的一条记录。
      

  3.   


    --1、我需要那个时间字段 假设为dtime
    --2、查询语句如下
    SELECT 产品ID,长,宽,高
      FROM (SELECT 产品ID,长,宽,高,
                   ROW_NUMBER() OVER(PARTITION BY 长,宽,高 ORDER BY dtime DESC) ROW_
              FROM TAB1)
     WHERE ROW_ = 1;
      

  4.   

    实际数据库里还有一个专门的时间戳字段,可以用来做 order by,
    我试了一下,总数据行数近 6 万,查询结果行数近 8 千,用时不到 2秒,确实能满足要求,谢谢各位。