永发信息网

SQLServer 筛选出时间最新的且不重复的数据

答案:3  悬赏:10  手机版
解决时间 2021-11-15 03:03
  • 提问者网友:骑士
  • 2021-11-14 23:56
SQLServer 筛选出时间最新的且不重复的数据
最佳答案
  • 五星知识达人网友:几近狂妄
  • 2021-11-15 01:34
select * from
(select *, num=ROW_NUMBER()over(partition by FK_Code order by RecTime desc) 
from trace_reports.dbo.package_code_recs10) T
where num=1你试试这个
追问能否解释下其中的意思,对于sql不是很会,只能写些简单的。谢谢追答num=ROW_NUMBER()over(partition by FK_Code order by RecTime desc)
这个是指按FK_Code分区,然后每一区内按RecTime 的降序排列,并且会在表的后面增加一个字段num,该字段显示每一区按1,2,3,4...排序

ROW_NUMBER ( )
OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )
通过语法可以看出 over里有两个参数, partition by 和 order by ,其中partition by是可以不写的,但是order by是必须有的。可能对order by 比较熟悉(就是按什么排序)partition 的中文解释是:n. 划分,分开;[数] 分割;隔墙;隔离物 vt. [数] 分割;分隔;区分。追问谢谢你的答案!
在请教下,如何提升自己写SQL语句的能力?追答可以在网上多找些问题自己练习,还可以看书,加入sql群里面都可以,方法有很多,自己找一个最合适自己的
全部回答
  • 1楼网友:轻熟杀无赦
  • 2021-11-15 02:25
distinct convert()
  • 2楼网友:山君与见山
  • 2021-11-15 02:10
select * from trace_reports.dbo.package_code_recs10
inner join
(select max(RecTime) RecTime,FK_Code from trace_reports.dbo.package_code_recs10 group by FK_Code) aa
on
aa.RecTime = package_code_recs10.RecTime and aa.FK_Code = package_code_recs10.FK_Code

这样写才对,你那样写in里面是把最大的时间都取出来了,但是in这些时间就错了,可能同一个FK_Code满足in条件的好几个时间
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯