需求

同一张表中,怎么查询出同一个ID的最新记录,比如,某一个用户做过很多次修改,我只以最后一次提交记录为准,这时候是不是犯难了

1、数据准备

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test`  (`id` int(11) NULL DEFAULT NULL,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`class` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`date` datetime(0) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES (1, '苹果', '水果', '2022-06-07 08:41:30');
INSERT INTO `test` VALUES (1, '橘子', '水果', '2022-06-08 08:41:30');
INSERT INTO `test` VALUES (1, '香蕉', '水果', '2022-06-09 08:41:30');
INSERT INTO `test` VALUES (2, '白菜', '蔬菜', '2022-06-01 08:41:30');
INSERT INTO `test` VALUES (2, '青菜', '蔬菜', '2022-06-02 08:41:30');SET FOREIGN_KEY_CHECKS = 1;

2、SQL写法

SELECT ID,NAME,CLASS,DATE
FROM TEST T
WHERE not EXISTS
( SELECT ID, NAME, CLASS, DATE FROM TEST WHERE ID = T.ID AND DATE > T.DATE ) 

3、简单解析一下

EXISTS关键字的使用

exists强调的是:是否返回结果集,不要求知道返回什么,比如

SELECT ID, NAME, CLASS, DATE FROM TEST WHERE ID = T.ID AND DATE > T.DATE

这里select后面是么都无所谓,重要的是只有where查询条件有匹配到,那么就可以理解我exists判断为true。这也是exists关键字“是否存在”的本质意义。

想应的:
NOT EXISTS就是EXISTS的取反操作。

具体到当前的sql语句而言:
WHERE ID = T.ID AND DATE > T.DATE
ID=T.ID:同一个ID,即同一个品种

DATE > T.DATE:
水果类有7号、8号、9号三条记录,蔬菜类有1号、2号两条记录
DATE > T.DATE这个条件要求,日期有比自己本身更新的日期,比如说7号、8 号上边还有9号,所以7号和8号符合Exists成立条件,返回true,同理,1号符合条件。

然后我们取反,NOT EXISTS,那么就会把9号和2号记录给取出来。

可能有点绕,不好理解,但是事实的确如此。这样我们就实现了,把相同ID的最新记录给查询出来的目的了。

最终的查询结果截图:

参考资料:sql中exists用法

【SQL怎么写】查询同一张表中同一个ID对应最新时间的数据记录相关推荐

  1. access重复数据累计_Access 查询同一张表中两个或以上字段含有重复项的记录

    这篇文章是对我自己另一篇文章的补充.( Access 查询同一张表中某个字段含有重复项的记录) 记录的动力总是来自于工作中遇到的问题.上次只要根据某个字段把有重复项的记录列出来,这次条件增多了,要根据 ...

  2. oracle查表字段长度,oracle中查询某张表中的字段名,字段类型,字段长度等信息...

    oracle中查询某张表中的字段名,字段类型,是否为空,字段长度等信息 --更改某张表的字段类型长度 alter table bill_info modify IDCARD VARCHAR2 (30) ...

  3. 使用sql如何找出两张表中同一字段的不同值

    前言: 正逢五一假期有时间来继续更新几篇有关于sql语句的相关博客.在做后台算法测试的时候可能常常会遇到查看输入表中的某条数据是否成功写入到输出表中了,这时候就需要对比这两张表中的数据了. 想要实现这 ...

  4. 统计某张表中的id在另一张表中出现的次数

    今天同事给我看了一条SQL语句,是要统计会员member表中每个会员的签到次数,说到底就是要统计member表中的id在member_sign表中出现的次数.他问我的时候正好我跟主管发生了点不愉快,搞 ...

  5. Access 查询同一张表中某个字段含有重复项的记录

    标题起得有点长,不过我要把文章主题表达的精确点.我的测试环境是Access 2003,操作对象是单一的表,目标是要把某个字段含有重复项的记录找出来.围绕这个目标再展开谈点相关的SQL语句.在两张表里查 ...

  6. sql查询两张表中不同的数据

    select * from B where (select count(1) from A where A.ID = B.ID) = 0

  7. orical从一张表中查出id,循环放进另一种表中,主键uuid

    create or replace procedure initUserRole --创建名为initUserRole的存储过程 --初始化用户角色不改动admin is idkey varchar2 ...

  8. PLSQL如何将千万数据快速插入到另一张表中_数据库设计中的 9 大常见错误

    作为数据库设计人员,当我们负责数据库项目时,在数据库设计以及把数据库部署到生产环境的过程中可能会遇到一些挑战. 其中一些问题不可避免,也无法控制.但是,其中相当一部分可以追溯到数据库设计本身的质量.我 ...

  9. php 查询同一张表相同数据,SQL查出一张表中重复的所有记录数据

    1.在面试的时候碰到一个 问题,就是让写一张表中有id和name 两个字段,查询出name重复的所有数据,现在列下:SELECT * from xi a where (a.username) in ( ...

最新文章

  1. apache php wordpress,windows 安装 apache php wordpress
  2. LVS学习笔记--概念
  3. 生成器表达式 内置函数
  4. 软件实施培训前的准备工作
  5. 解决80端口被占用的情况
  6. 异步tcp通信——APM.ConsoleDemo
  7. 【纪念】我的大学同学名单
  8. 大数据挑战与NoSQL数据库技术pdf
  9. 2017年英国机器人周:身体有问题 就找机器人
  10. JavaScript表单验证
  11. android java 调试快捷键_最强Android studio 使用快捷键和调试技巧
  12. php做推送服务端实现ios消息推送
  13. 基于STM32的PWM电机驱动TB6612、A4950
  14. stack(后进先出)
  15. 计算机革命的主角和英雄——十大超级老牌黑客
  16. php predis连接超时,如何解决redis连接超时问题
  17. docker Starting MySQL database server mysqld fail解决办法
  18. windows中不能创建的目录
  19. yum报错网络不可达,但是配置的网络能够ping通
  20. python 语音识别校正_Python语音识别时间偏移量

热门文章

  1. utils.data的使用
  2. 打印机连接不上打印设备提示0x0000011b 正式解决方案无需卸载补丁
  3. 硬件在环系统环境架构
  4. z=z(x,y)中面积积分和方向余弦
  5. 如何让DIV标签居中显示?
  6. 让人疑惑的STM32F4F7芯片
  7. 5毛VS600亿,食品安全问题是卫龙上市最大的拦路虎?
  8. GGNN:GATED GRAPH SEQUENCE NEURAL NETWORKS
  9. iOS播放音乐与播放系统声音
  10. 【滴水逆向笔记】C语言指针