切换导航
简历
工具
演示
查询
导航菜单
服务端
30
前端
114
数据库
82
进阶开发
8
桌面程序
2
QA
15
软件使用
36
规范协议
5
操作系统
11
AI
0
复用资源
6
硬件
0
标签
SQL Server
Redis
MySQL
其它
Oracle
外部链接
.NET Core SDK和运行时安装包
淘宝 NPM 镜像
查询网
Tables Generator线上表格转换工具
引用cdn在线脚本和样式
首页
数据库
获取多个时间字段多行记录中最大时间的记录案例
[TOC] ## 1. 获取多个时间字段多行记录中最大时间的记录案例 ### 1.1. 使用 CASE 表达式嵌套(适用于少量字段) 假设表名为 `your_table`,4 个时间字段为 `time1`、`time2`、`time3`、`time4`,可以通过多次比较获取最大值: ```sql SELECT id, -- 其他需要保留的字段 CASE WHEN time1 >= time2 AND time1 >= time3 AND time1 >= time4 THEN time1 WHEN time2 >= time1 AND time2 >= time3 AND time2 >= time4 THEN time2 WHEN time3 >= time1 AND time3 >= time2 AND time3 >= time4 THEN time3 ELSE time4 END AS max_time FROM your_table; ``` ### 1.2. 处理 NULL 值(更健壮的版本) 如果字段可能包含 `NULL`,需要先处理 `NULL`(否则比较结果可能不符合预期)。可以用 `ISNULL` 函数将 `NULL` 转换为一个极小的时间值: ```sql SELECT id, CASE WHEN ISNULL(time1, '1900-01-01') >= ISNULL(time2, '1900-01-01') AND ISNULL(time1, '1900-01-01') >= ISNULL(time3, '1900-01-01') AND ISNULL(time1, '1900-01-01') >= ISNULL(time4, '1900-01-01') THEN time1 WHEN ISNULL(time2, '1900-01-01') >= ISNULL(time1, '1900-01-01') AND ISNULL(time2, '1900-01-01') >= ISNULL(time3, '1900-01-01') AND ISNULL(time2, '1900-01-01') >= ISNULL(time4, '1900-01-01') THEN time2 WHEN ISNULL(time3, '1900-01-01') >= ISNULL(time1, '1900-01-01') AND ISNULL(time3, '1900-01-01') >= ISNULL(time2, '1900-01-01') AND ISNULL(time3, '1900-01-01') >= ISNULL(time4, '1900-01-01') THEN time3 ELSE time4 END AS max_time FROM your_table; ``` ### 1.3. 使用 UNION ALL 转换为列比较(适用于字段较多时) 如果字段数量较多,嵌套 `CASE` 会比较繁琐,可以通过 `UNION ALL` 将多列转为多行,再用 `MAX()` 求最大值: ```sql SELECT id, MAX(time_val) AS max_time FROM ( SELECT id, time1 AS time_val FROM your_table UNION ALL SELECT id, time2 AS time_val FROM your_table UNION ALL SELECT id, time3 AS time_val FROM your_table UNION ALL SELECT id, time4 AS time_val FROM your_table ) AS sub GROUP BY id; ``` ### 1.4. 三种方法对比: - 方法1:简洁直观,适合字段少的情况(4个字段以内)。 - 方法2:在方法1基础上处理了 `NULL`,更健壮。 - 方法3:扩展性好,字段数量多时更易维护,但性能略低于前两种(需扫描表多次)。 根据实际场景选择即可,通常推荐方法2(兼顾简洁性和健壮性)。
扫一扫手机看
点击排行
windows 文件资源管理器使用
Layui 弹窗open使用说明
SQL Server 中字符串函数使用
C# 使用QQ邮箱代理做邮件接收功能
SQL Server关于apply的两种形式cross apply 和 outer apply
ASP.NET MVC 模型的自定义验证
nvm安装及常用命令
SQL Server 中数据类型转换
SQL Server 中WITH AS短语的使用
IE浏览器下AJAX缓存问题导致数据不更新的解决办法
订阅号