用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
1楼的over中不应当加order by,加了order by product_id desc得到的就不是第1条记录了,而是product_id最大的一条记录。
--1、我需要那个时间字段 假设为dtime --2、查询语句如下 SELECT 产品ID,长,宽,高 FROM (SELECT 产品ID,长,宽,高, ROW_NUMBER() OVER(PARTITION BY 长,宽,高 ORDER BY dtime DESC) ROW_ FROM TAB1) WHERE ROW_ = 1;
实际数据库里还有一个专门的时间戳字段,可以用来做 order by, 我试了一下,总数据行数近 6 万,查询结果行数近 8 千,用时不到 2秒,确实能满足要求,谢谢各位。
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
--1、我需要那个时间字段 假设为dtime
--2、查询语句如下
SELECT 产品ID,长,宽,高
FROM (SELECT 产品ID,长,宽,高,
ROW_NUMBER() OVER(PARTITION BY 长,宽,高 ORDER BY dtime DESC) ROW_
FROM TAB1)
WHERE ROW_ = 1;
我试了一下,总数据行数近 6 万,查询结果行数近 8 千,用时不到 2秒,确实能满足要求,谢谢各位。