当前位置: 代码迷 >> Sql Server >> 请问SQL语句,查询每个指定学号的最新记录
  详细解决方案

请问SQL语句,查询每个指定学号的最新记录

热度:114   发布时间:2016-04-24 08:58:15.0
请教SQL语句,查询每个指定学号的最新记录
本帖最后由 greenfang2018 于 2015-07-10 22:59:23 编辑
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')
  相关解决方案