sid(学号) T1 R1 InsertTime(插入时间)
T101 10 20 2015/5/22 15:00
T101 8 21 2015/5/22 14:30
T101 9 22 2015/5/22 14:20
T102 21 41 2015/5/22 16:00
T102 8 21 2015/5/22 15:30
T102 9 22 2015/5/22 14:20
T103 41 41 2015/5/22 12:00
T103 18 12 2015/5/22 11:30
T103 19 13 2015/5/22 10:20
T104 51 71 2015/5/22 15:00
T104 28 16 2015/5/22 14:30
T104 39 17 2015/5/22 14:20
T105 11 11 2015/5/22 18:00
T105 18 11 2015/5/22 12:30
T105 19 27 2015/5/22 11:20
T106 21 31 2015/5/22 17:00
T106 48 26 2015/5/22 15:30
T106 49 37 2015/5/22 14:20
表名:data
我想得到以下结果(也就是得到学号T101 ,T102 , T103, T104 的最新记录):
sid T1 R1 InsertTime(插入时间)
T101 10 20 2015/5/22 15:00
T102 21 41 2015/5/22 16:00
T103 41 41 2015/5/22 12:00
T104 51 71 2015/5/22 15:00
也就是得到学号T101 ,T102 , T103, T104 的最新记录,不要T105,T106的记录,请教SQL语句如何写,感谢各位!!!!!!!!!!
------解决思路----------------------
WITH
n1 AS
(SELECT sid,max(intime) AS intime FROM tb1 GROUP BY sid)
SELECT t.* FROM tb1 AS t LEFT JOIN n1 ON t.sid=n1.sid AND t.intime=n1.intime
------解决思路----------------------
-- 大概这样,没有数据,未测试。
with mt as (
select
sid , t1 , r1 , inserttime ,
ROW_NUMBER() over(partition by sid order by inserttime desc) rn
)
select * from mt where rn = 1
------解决思路----------------------
楼上写的, 都会将每个学号显示一条最新的记录。
不要T105,T106的记录, 这个的依据是什么? 你没说清楚,
如果单单是不要这两条, 后边加条件就好了。
with mt as (
select
sid , t1 , r1 , inserttime ,
ROW_NUMBER() over(partition by sid order by inserttime desc) rn
)
select * from mt where rn = 1 and sid not in('T105', 'T10')