幕布斯6054654
;WITH tbl AS (SELECT *,ROW_NUMBER() OVER (PARTITION BY ordcode,idx ORDER BY odate DESC) rn FROM #table )SELECT * FROM tblWHERE rn=1
或者
SELECT * FROM #table
WHERE odate IN(SELECT MAX(odate) FROM #table GROUP BY ordcode,idx)
测试如下
sql2008运行,未做优化。
CREATE TABLE #table(odate DATETIME,ordcode VARCHAR(50),idx INT,qtp int
)
INSERT INTO #table ( odate, ordcode, idx, qtp )VALUES ( '2012-7-3', -- odate - datetime 'AD12C3-095ABCD', -- ordcode - varchar(50) 100, -- idx - int 1024 -- qtp - int )
INSERT INTO #table ( odate, ordcode, idx, qtp )VALUES ( '2012-6-28', -- odate - datetime 'AD12C3-095ABCD', -- ordcode - varchar(50) 200, -- idx - int 1248 -- qtp - int )INSERT INTO #table ( odate, ordcode, idx, qtp )VALUES ( '2012-6-9', -- odate - datetime 'AD12C3-095ABCD', -- ordcode - varchar(50) 200, -- idx - int 864 -- qtp - int )INSERT INTO #table ( odate, ordcode, idx, qtp )VALUES ( '2012-6-28', -- odate - datetime 'AD12C3-095ABCD', -- ordcode - varchar(50) 300, -- idx - int 512 -- qtp - int )INSERT INTO #table ( odate, ordcode, idx, qtp )VALUES ( '2012-6-9', -- odate - datetime 'AD12C3-095ABCD', -- ordcode - varchar(50) 300, -- idx - int 608 -- qtp - int )INSERT INTO #table ( odate, ordcode, idx, qtp )VALUES ( '2012-6-28', -- odate - datetime 'AD12C3-095ABCD', -- ordcode - varchar(50) 400, -- idx - int 416 -- qtp - int ) INSERT INTO #table ( odate, ordcode, idx, qtp )VALUES ( '2012-6-9', -- odate - datetime 'AD12C3-095ABCD', -- ordcode - varchar(50) 400, -- idx - int 736 -- qtp - int ) INSERT INTO #table ( odate, ordcode, idx, qtp )VALUES ( '2012-7-3', -- odate - datetime 'AD12C3-095ABCD', -- ordcode - varchar(50) 500, -- idx - int 632 -- qtp - int ) INSERT INTO #table ( odate, ordcode, idx, qtp )VALUES ( '2012-7-5', -- odate - datetime 'AD12C3-095E', -- ordcode - varchar(50) 100, -- idx - int 800 -- qtp - int )
INSERT INTO #table ( odate, ordcode, idx, qtp )VALUES ( '2012-7-2', -- odate - datetime 'AD12C3-095F', -- ordcode - varchar(50) 100, -- idx - int 200 -- qtp - int )
INSERT INTO #table ( odate, ordcode, idx, qtp )VALUES ( '2012-7-4', -- odate - datetime 'AD12C3-095G', -- ordcode - varchar(50) 100, -- idx - int 400 -- qtp - int ) INSERT INTO #table ( odate, ordcode, idx, qtp )VALUES ( '2012-6-22', -- odate - datetime 'AD12C3-096ABCD', -- ordcode - varchar(50) 100, -- idx - int 928 -- qtp - int )
--省略了一些测试数据
SELECT * FROM #table
WHERE odate IN(SELECT MAX(odate) FROM #table GROUP BY ordcode,idx)
;WITH tbl AS (SELECT *,ROW_NUMBER() OVER (PARTITION BY ordcode,idx ORDER BY odate DESC) rn FROM #table )SELECT * FROM tblWHERE rn=1
DROP TABLE #table