
有时间列就取最大时间列
有自增的id就去最大id
如果是想返回一个记录集,并且有时间列的话可以这么做
select 重复列,时间列,其余列
inner join (select 重复列,max(时间列) as 时间列 from 表 group by 重复列) AS T2
on t1重复列=t2重复列 and t1时间列 =t2时间列
from 表 AS T1
select acpsn_num as 人员编码,bvschool as 毕业学校
from hr_hi_person a
left join
(
select , row_number() over(partition by cpsn_num order by dgrduateDate desc) as rowNum from hr_hi_edu
)b
on acpsn_num =bcpsn_num and browNum=1
只要判断表中的时间字段跟当前日期,对比两者的秒数,绝对值最少的就是离当前最近的那条记录了,语句如下:
select top 1 from 表 order by abs(datediff(ss,时间,getdate()))
有时候,我们的思想经常走入极端,妄想用一个简单的方法包含所有的应用。
但这样的方法是不存在的。
所以大多数的时候,我们还是需要一步一个脚印来做事情。
如果是程序端解决可以考虑使用事务
如果是数据库端解决推荐使用存储过程
希望对你有帮助
如果数据库也存在对应当前时间的一条数据呢,要不要也要一起取。
假设要的话,oracle的写法是这样子,假如当前时间是current_time, 有数据表TABLE1,字段为data和create_date 可以这样写
select from (select from TABLE1 where create_date > current_time order by create_date ) where rownum = 1
union
select from (select from TABLE1 where create_date < current_time order by create_date desc) where rownum = 1
union
select from TABLE1 where create_date = current_time and rownum = 1
意思就是取得小于目标时间的最大的一条记录和大雨目标时间的最小的一条记录以及等于目标时间的一条记录的结果集。因为oracle没有类似于sql server的limit和top这些函数,只能通过排序来取得最近的记录,如果是sql server简单多了。
SELECT
FRON
表 main
WHERE
NOT EXISTS (
SELECT 1
FROM 表 sub
WHERE mainC1 = subC1 AND mainC5 < subC5
)
算法就是, 对于 每一个 C1 不存在有其他行的 C5 比本行的 C5 更大
以上就是关于sql中如何取重复的数据取时间最近的一条全部的内容,包括:sql中如何取重复的数据取时间最近的一条、sql语句中怎么去取最近时间的值、如何返回日期列中离当前时间最近的那一行数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)