5 回答
TA贡献1848条经验 获得超10个赞
日期最大的这条记录显示出来:
select * from order where odate in (select max(m.odate) from order as m inner join order as n on m.ordcode=n.ordcode where m.ordcode=n.ordcode and m.idx=n.idx) order 是表名。这个我没有在sqlserver里面测试,你试试吧,思路就是这样的。
TA贡献1876条经验 获得超7个赞
;WITH tbl AS (
SELECT *,ROW_NUMBER() OVER (PARTITION BY ordcode,idx ORDER BY odate DESC) rn FROM #table
)SELECT * FROM tbl
WHERE 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 tbl
WHERE rn=1
DROP TABLE #table
- 5 回答
- 0 关注
- 992 浏览
添加回答
举报