程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了选择最新记录大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决选择最新记录?

开发过程中遇到选择最新记录的问题如何解决?下面主要结合日常开发的经验,给出你关于选择最新记录的解决方法建议,希望对你解决选择最新记录有所启发或帮助;

选择最新记录

我想运行一个 SELEct 语句,该语句运行并仅通过 Recored_timestampe 字段为键teacher_ID 和 student_ID 选择最新记录。所以任何时候,它运行它只需要提供一个记录。请问我怎么办?输出可能没有 Recored_timestampe 字段。谢谢

解决方法

首先按日期时间排列记录

     SELECT *,RANK() OVER (PARTITION BY student_id ORDER BY Recored_timestamp desc) as ranking
     FROM #temp

然后,如果你想知道student_id不为空的最新记录,那么你可以使用OUTER APPLY添加一个非NULL的student_id列。

OUTER APPLY (SELECT student_id 
             FROM #temp 
             WHERE #temp.teacher_id = ranktable.teacher_id 
               AND student_id IS NOT NULL
            ) AS jointable   

这是一个例子:

create table #temp
(
     teacher_id int,student_id int,teacher_name varchar(40),comment varchar(100),Recored_timestamp datetiR_81_11845@e
)

INSERT INTO #temp 
VALUES
 (449,111,'lucy','Could be better','2021-05-04 07:00:00.000'),(449,null,'smily','2021-05-11 07:00:00.000'),'not listening','2021-05-08 07:00:00.000'),(448,'Toni','Good','2021-06-04 09:00:00.000'),222,'not doing as expected','2021-06-04 08:00:00.000')

SELECT DISTinCT teacher_id,jointable.student_id,teacher_name,comment,Recored_timestamp,ranking
FROM
(
     select *,RANK() OVER (PARTITION BY teacher_id ORDER BY Recored_timestamp desc) AS ranking
     FROM #temp
) AS ranktable
OUTER APPLY (SELECT student_id 
             FROM #temp 
             WHERE #temp.teacher_id = ranktable.teacher_id 
               AND student_id IS NOT NULL
            ) AS jointable   
WHERE ranking = 1 --only neWest record will be extracted

drop table #temp
,

使用窗口函数,按teacher_id和student_id进行分区,然后按recorded_timestamp排序,就会得到想要的结果。

SELEct * from(SELEct teacher_id,student_id,recorded_timestamp,row_number() over(partition by teacher_id,student_id order by recorded_timestamp desc)as rownum from temp0607)out1 where rownum=1

此外,您可能还需要查看 Recorded_timestamp 的存储方式。如果存储为字符串,则可以使用 from_unixtime(unix_timestamp(recorded_timestamp,'dd/MM/yyyy HH:mm'),'dd/MM/yyyy HH:mm')

将其转换为时间戳 ,

您可以根据此查询获取最新数据。

SELECT TOP 1 * FROM tablename T1 INNER JOIN(SELECT teacher_id,Max(Recored_timestamp) as MaxDate from tablename GROUP BY teacher_id) T2 ON T2。 teacher_id = T1.teacher_id AND T1.Recored_timestamp = T2.MaxDate

大佬总结

以上是大佬教程为你收集整理的选择最新记录全部内容,希望文章能够帮你解决选择最新记录所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。