sql 实现取表中相同id时间最大的一行 利用distinct on
2024-08-30 07:45:00
数据表是这样的
select * from water_level_records m where (
select count(*) from water_level_records n where m.device_id = n.device_id and m.record_time < n.record_time
) < 1
这个sql的逻辑是把一个表当做两个表关联来使用,当满足m的记录时间小于n的记录时间的数量<1 即只有一个相等时返回,即是时间的最大值, 如果为<2 则是为前两大的值,这里以device_id为唯一关联
一种更搞笑的方法如下
SELECT DISTINCT on (device_id ) device_id ,record_time from water_level_records order by device_id , record_time desc
这里DISTINCT on的用法和效果与DISTINCT不同,如果这里为DISTINCT 则 device_id record_tiem 这两列有一列不同就满足唯一性。而distinct on的效果为不管后面跟了几列,必须保持device_id的唯一性
这里加上order by record_time desc 的效果为只取时间最大的一项。另注意DISTINCT on (device_id ) 如果加order by 的话 order by device_id必填
最新文章
- SQL Server 自动化运维系列
- 【Linux命令】之fc,手动安装字体
- Bomb---hdu5934(连通图 缩点)
- 通过boundingRectWithSize:options:attributes:context:计算文本尺寸
- Linux下拷贝目录和删除
- iOS开发——动画编程Swift篇&;(二)UIView转场动画
- JavaScript目录
- 【BZOJ】【2190】【SDOI2008】仪仗队
- ggplot2 demo
- 【JDBC】预编译SQL与防注入式攻击
- ionic移动开发入门
- [POJ] 3468 A Simple Problem with Integers [线段树区间更新求和]
- ASP.NET MVC 中将FormCollection与实体间转换方法【转】
- segment fault异常及常见定位手段
- socket编程中客户端常用函数
- Python学习日记(一):拜见小主——Python
- DDD实战进阶第一波(十五):开发一般业务的大健康行业直销系统(总结篇)
- matlab练习程序(点云下采样)
- Windows到Linux的文件上传、下载
- Element-ui el-cascader不触发prop?
热门文章
- 【CSS】聊一聊css的选择器
- python标准库之shutil——可操作权限的文件操作库
- jps 命令
- [bzoj1892][bzoj2384][bzoj1461][Ceoi2011]Match/字符串的匹配_KMP_树状数组
- [转帖]英特尔首款采用10nm技术的混合CPU“Lakefield”即将发布
- 对Redis 单进程、单线程模型的理解(网摘)
- docker学习笔记之把容器commit成镜像
- iview给布局MenuItem标签绑定点击事件
- Leaf Sets CodeForces - 1042F (树,最小划分)
- 怎样理解DOM