同一个对象的最新数据的sql

ABAP SQL 取日期+时间最新的一条数据 我们 SAP 系统的表数据中日期和时间是作为主键的,那么如果通过 ABAP SQL 取到最新日期的最新时间呢。另外,通过 ABAP 取出所有数据,存到内表,然后对内表排序取第一条也能实现相同的效果。我们在系统对接的时候,外部系统可能会推送多个数据给到我们。解决方案:可以通过两个。的时间,另一个时间是。 阅读详情

我们有一些酒店,酒店用酒店名唯一标识,酒店的地址可能有多个版本,比如不同网站的地址不一样,还有一个createTime,表示我们得到这个酒店的时间。
现在的问题:对于每个酒店,我们需要获取最近创建的这条纪录,比如北京aa饭店,我们需要获取id=2的那条纪录

测试表定义:
CREATE TABLE `tt` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  `createTime` datetime DEFAULT NULL,
  PRIMARY KEY (`Id`),
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

测试用的几条纪录:
id   name       address    createTime
1,"北京aa饭店","北京","2009-01-01 00:00:00"
2,"北京aa饭店","北京市海淀区","2009-01-03 00:00:00"
3,"如家快捷","北京","2010-01-01 00:00:00"
4,"汉庭","北京","2010-03-04 00:00:00"

直觉的实现应该是对name,createTime排序(group?),然后对于每个name,选一个createTime最大的

想了很久,能想到的就是exists,
select a.* from tt a where not exists (select b.id from tt b where b.name=a.name and b.createTime>a.createTime)

explain 一下
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,"PRIMARY","a","ALL",NULL,NULL,NULL,NULL,4,"Using where"
2,"DEPENDENT SUBQUERY","b","ALL",NULL,NULL,NULL,NULL,4,"Using where"

对name建立索引
explain
1,"PRIMARY","a","ALL",NULL,NULL,NULL,NULL,4,"Using where"
2,"DEPENDENT SUBQUERY","b","ALL","name",NULL,NULL,NULL,4,"Using where"
它的实现应该是这样:对于每一个record,根据name索引找到同名的所有酒店,如果没有比他新的,就是它了,否则这条纪录被丢弃

上网搜索了一下,发现这个帖子和我的问题一样 http://stackoverflow.com/questions/1313120/sql-retrieving-the-last-record-in-each-group
不知道还有没有更好的解决方法,有兴趣的可以讨论讨论。

里面有个用left join的,其实和用exists很像

SELECT a.* FROM tt a LEFT JOIN tt b  ON (a.name = b.name AND a.createTime < b.createTime) WHERE b.name IS NULL;
is null其实就是not exists的意思
explain一下:
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,"SIMPLE","a","ALL",NULL,NULL,NULL,NULL,4,""
1,"SIMPLE","b","ALL","name",NULL,NULL,NULL,4,"Using where"

可以看到和用exists很像,但是left join的好像都是simple的select_type。对mysql的查询优化不熟,哪位能解释一下

还有一种和原始的想法很像,先排序,然后group一下
select * from (select * from tt order by createTime desc) as X group by name
explain:
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,"PRIMARY","<derived2>","ALL",NULL,NULL,NULL,NULL,4,"Using temporary; Using filesort"
2,"DERIVED","tt","ALL",NULL,NULL,NULL,NULL,4,"Using filesort"
使用了temporary 和 filesort,估计纪录多了效率不怎么样。

 

MCGS 昆仑通态触摸屏 modbus TCP 数据转发 MCGS触摸屏数据转发modbus TCP数据转发 阅读详情

相关推荐

Circos在Windows下的安装教程

这里写自定义目录标题Circos简介安装Perl 的安装Circos安装安装及解压安装Modules测试用例官方文档 Circos简介 (来源官网:http://circos.ca/software/readme/ O.INTRODUCTION部分) Circos is a program for the generation of publication-quality, circularly composited renditions of genomic data and related annot

qq_42318911的博客 1660

sql取每组最新数据

引用https://blog.youkuaiyun.com/cs_hnu_scw/article/details/105397337 文章目录 情景引入 基础知识介绍 需求 预热准备 定义测试“书”表的DDL 随便插入几条测试数据的DML 方案设计 错误方案一 结果 分析 错误方案二 结果 分析 正确方案一 结果 分析 正确方案二 结果 分析 正确方案三 结果 分.

qq_37243112的博客 1782

Python学习(一)

快速入门 1.Linux系统中是可以直接使用Python进行编程,具体如下: 进入Python:在linux的Terminal中输入 Python ,进入Python的命令行; 退出Python:在linux的Terminal中输入quit() 或 exit() 或 ctrl +d ,再回车,退出Python的命令行。 2.python的源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做Python的开发。 3.Python程序的文件扩展名通常都是 .py。 4.执行Python程序的方式:在

SummerXRT的博客 1280

SQL 获取同一个ID中的最新记录

SELECT * FROM tablename b WHERE NOT EXISTS ( SELECT 1 FROM tablename WHERE Id=b.Id AND CreateDate > b.CreateDate )

qq_15198113的博客 2748

linux中的sendmail发送邮件

linux下的sendmail发送邮件

无痕的博客 6419

NT35310 - LCD显示屏

NT35310 是一个低功耗、26 万色、单芯片的 TFT-LCD 控制器/驱动器,分辨率 480*320,它有一个 345600 字节的显示 RAM 和一整套控制功能。NT35310 支持数字接口(MDDI),MIPI 接口,RGB 接口,8 / 9 / 16 / 18 位8080 接口。可以实现指定的窗口区域可以有选择地更新,以便可以显示运动图像。同时也可以独立显示静止的图像区域。...

m0_62444125的博客 3320

SQL Server同一个表中获取最新日期的多行数据

我整理的一些关于【数据】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/eDOcp1SQL Server 同一个表中获取最新日期的多行数据 在数据分析和管理中,SQL Server 是一种广泛使用的关系数据库管理系统。我们经常需要从表中获取最新的日期记录。本文将介绍如何在 S...

weixin_41495897的博客 869

从零到一:STM32G431的DSP库集成与FFT实战避坑指南

本文详细介绍了在STM32G431微控制器上集成CMSIS-DSP库并进行FFT实战开发的完整流程。重点解析了通过CubeMX和Keil环境配置DSP库的关键步骤、编译器宏定义陷阱及解决方案,并提供了FFT算法优化、内存管理及常见问题诊断的实用技巧,帮助开发者高效实现嵌入式信号处理应用。

oauth7security的博客 768

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

同一张表中,怎么查询出同一个ID的最新记录

是小宗啊?的博客 4701

STM32外部中断EXTI原理与飞控实时应用实战

外部中断(EXTI)是嵌入式系统中实现事件驱动和实时响应的核心机制,其本质是将外部电平变化转化为可调度的CPU中断事件。基于ARM Cortex-M NVIC架构,EXTI通过GPIO-EXTI-NVIC三级硬件通路实现低延迟信号捕获,具备边沿触发、优先级管理与挂起控制等关键能力。在四轴飞控、工业传感器、人机交互等对毫秒级响应有强需求的场景中,EXTI显著优于轮询方式,兼顾实时性与CPU资源效率。实际开发需严格遵循SYSCFG映射→EXTI配置→NVIC使能的时序逻辑,并规避常见陷阱如中断号误配、伪触发、低

weixin_36382073的博客 65

C#上位机开发揭秘:从新手到大神的蜕变之路,代码实例全解析!

上位机通常是与硬件设备(如嵌入式系统、PLC、传感器等)进行通信的计算机程序。它的作用是通过某种通信协议(如串口、TCP/IP 等)向设备发送命令,并接收设备的反馈数据。上位机需要有一个图形用户界面(GUI)来展示数据或控制硬件设备。通过本篇教程,我们介绍了 C# 上位机开发的基本步骤,从串口通信的实现,到图形用户界面的构建,再到进阶功能的实现。作为上位机开发的新手,掌握这些基础知识是非常重要的。而随着经验的积累,你可以逐步尝试更复杂的功能,比如多线程处理、数据分析与存储等。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 4828

SQL group by 取最新一条数据

如现有数据: id | name | time 1 | aaa | 1566204958 2 | aaa | 1566204967 3 | aaa | 1566204989 4 | bbb | 1566204958 5 | bbb | 1566204967 6 | bbb | 1566204989 7 | ccc | 1566204958 8 | ccc | 1566204967 9 | c...

潘广宇的博客 8898

Openclaw第5章 知识库管理

💡:学会使用 OpenClaw构建个人知识库系统,实现网页文章存档、GitHub项目管理、论文笔记整理和跨设备同步。

Maynor的博客 775

主流SQL查询多条只取其中最新的一条数据

业务场景: 在针对某个类型数据存在多条时,但只想取最新的一条。在可以确定时哪种类型时我们使用简单sql就可以解决。 ORACLE-SQL: 如: select * from ( select * from t_table a where a.tpye=? order by a.time desc ) where rownum=1; MYSQL-SQL: 如: select * from t_table a where a.type=? ...

Cx的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Sql 查询最新十条数据和查询最新一条数据

一、Sql 查询最新十条数据 select * from 表名 order by id(主键) desc limit 10 示例: SELECT * FROM gold_value.chow_tai_fook order by id desc limit 10; 返回结果 : 二、Sql 查询最新十条数据并按时间排序 SELECT * FROM (select * from 表名 order by id desc limit 10) tempTable ORDER BY id(排序字段

シ❤゛甜虾的个人博客 2万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

sql如何根据时间取出最新的数据记录

sql如何根据时间取出最新的数据记录 1-如何根据时间取出最新的数据记录 例子:table1 : userCode name datetime 107 tom 2017/6/21 22:34 107 tom 2017/6/24 10:21 107   tom 2017/12/7 10:45 107   tom 2017/1/15 14:01 107   tom ...

LYBWWP 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

sql数据库表对象无效_SQL数据库对象的对象权限和特权

系统名称与SQL名称,第1部分 内容系列: 此内容是系列#中的#部分: 系统名称与SQL名称,第1部分 https://www.ibm.com/developerworks/library/?series_title_by=system+versus+sql+name 请继续关注本系列中的其他内容。 此内容是该系列的一部分: 系统与SQL名称,第1部分 请继续关...

cusi77914的博客 3619

使用SQL查询物料最新采购价格的示例

本示例可从SQL Server数据库查得物料在最新采购日期的最小采购价格,即如果同一物料存在多条采购记录,首先取采购日期最大的,如果同一采购日期仍然存在多条记录,取采购价格最低的。(通过调整Order By也可实现其他需求,例如取最早日期或最高采购价格的记录) --创建临时表,插入测试数据 if Object_id('Tempdb..#temp1') is n...

dinge8714的博客 3178

sql 分组查询最新的一条数据

参考:https://www.cnblogs.com/java-spring/p/11498457.html 开发中,遇到查询一个分组中最新的一条数据的需求。记录如下: 需求:从表格statistics中选择consumer_app_name分组中,最新的一条数据。 思路:先排序,再分组,然后保证子查询仍然有序。 1、首先将statistics降序排列 注意,使用limit的原理后面再说。 SELECT * FROM statistics order by create_dat..

Longtermevolution的博客 1608

mybatis Sql查询 返回对象或者list数据中包含一个对象的list集合

1.查询的数据对象 @Data public class JdOrder implements Serializable{ private Long orderId; private Long finishTime; private Integer orderEmt; private Long orderTime; private Long pare...

yijian941215的博客 2万+

sql分组获取不同对象最新一条数据

工作遇到问题,需要从大量的数据中筛选出最新的一条数据,但是数据属于不同的对象。也就是获取不同对象的最新一条数据。 上例子: create table `test` ( `id` int (11), `company_name` varchar (765), `type` varchar (765), `create_date` datetime ); insert into `test` (`id`, `company_name`, `type`, `create_date`) value

春天的波菜 744

SQL GROUP BY分组之后如何选择每组最新的一条数据

SQL GROUP BY分组之后如何选择每组最新的一条数据 文章目录概述 概述

wh柒八九的博客 1万+

Sql如何从表中取到最新的数据

Sql如何从表中取到最新的数据 表newdate select a.* from newdate a inner join (select max(update_date) date from newdate) b on a.update_date = b.date 结果表 当 某一字段 值相同,求该值所对应的最新数据时 表newdate1 1.求三家商店最新一天的销售额 select...

小流 1万+

sql按照时间取最新的数据

本来数据库数据是这样,meter_id会有重复,create_time和value值不断更新,需求是取最新的value值, sql执行结果,meter不重复,value值是最新的,问题类似于取各科成绩最高分和最低分。。业务逻辑是先去取最大的时间值,然后再去筛选。 select msh.meter_id,msh.valve from meter_state_histories msh,( select meter_id, max(create_time)as time from meter_sta

weixin_54363295的博客 5910

SQL取表中某字段的最新日期对应数据

SQL取表中某字段的最新日期对应数据 多条SQL实现,适合数据量比较大的情况 SQL为Teradata下代码,其它数据库需作调整 创建临时表,存储要取字段的范围 create multiset volatile table tmp_table ( key_name varchar(100), last_date varchar(100) ) ON COMMIT PRESERVE ROWS; 取对应字段及其最新日期 insert into tmp_table select key_name

CoffreLv的博客 9648

sql语句中分组取每组的最新数据

今天敲sql的时候遇到了一个问题,业务流程是 检查记录->整改通知->整改回复->检查组复查 如果复查不通过 则 检查组复查->整改通知->整改回复->检查组复查 此时一条检查记录就可能对应多条整改通知去最新数据就用到了分组 简化一下模型 要显示最新时刻的物品价格goods(其实不太一样我的情况主键相当于这里的time) 编号num 价格price 时间...

qq_43313769的博客 5605
上一篇: Ubuntu Linux下如何用源码文件安装软件
下一篇: 5/3
fancyerII
博客等级 码龄23年 48粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值