精华内容
下载资源
问答
  • mysql分组排序取时间最近的第一条

    千次阅读 2020-04-29 10:30:03
    起因:需要对一张表数据进行分组排序,不同设备最新的一条更新记录,那么问题来了, 表数据经过简单Group By 之后,所获取到的 数据与期望数据不一致, 如图不同vem_id的最新次的更新数据,常规group by 无法解决...

     起因:  需要对一张表数据进行分组排序,取不同设备最新的一条更新记录,那么问题来了, 表数据经过简单Group By 之后,所获取到的  数据与期望数据不一致,

    如图取不同vem_id的最新一次的更新数据,常规group by 无法解决数据错乱问题.

    解决: group by 的用法还有不清楚的自行百度 , 说说我的解决方法,先按照时间对表数据按时间排序,然后进行分组,从前往后写不好写,那么逆向思维,从后往前写 ,先按照时间排序,然后在group by , 解决数据错乱问题

     sql :   select * from (select * from lenovo_inventory_record where vem_id in ('VEM000004','VEM000005') ORDER BY check_time DESC) d GROUP BY d.vem_id ;

    结果:  

     

     

    展开全文
  • 问题描述: 现有如下图所示数据库数据: ...首先使用分析函数row_number() over (partiion by … order by …)对数据进行分组编号,然后取出分组编号为1的数据,即需求中要第一条数据。 PARTITION BY

    问题描述:

    现有如下图所示数据库数据:
    在这里插入图片描述
    我需要从vehicle_year_check_type = 1 的数据中,通过 vehicle_id 车辆id分组,vehicle_year_check_effective_date 有效时间倒序排列,取出相同车辆中的第一条数据,即时间最大的那条数据。

    解决办法:

    首先使用分析函数row_number() over (partiion by … order by …)对数据进行分组编号,然后取出分组编号为1的数据,即需求中要取的第一条数据。
    PARTITION BY:用来指定要按哪些字段进行分组,将这些字段值相同的记录归在一起编号。
    ORDER BY:用来指定在同一组中进行编号时要按照什么条件进行排序。
    SQL语句如下:

    SELECT
    	s.*
    FROM
    	(
    		SELECT
    			vyci.*, row_number () over (
    				PARTITION BY vyci.vehicle_id
    				ORDER BY
    					vyci.vehicle_year_check_effective_date DESC
    			) AS group_idx
    		FROM
    			vehicle_year_check_info AS vyci
    		WHERE
    			vyci.vehicle_year_check_type = '1'
    	) s
    WHERE
    	s.group_idx = 1
    

    查询结果如下:
    在这里插入图片描述

    展开全文
  • 在项目中要查询用户最近登录的一条记录的 ip 直接写如下 SQL: 1 SELECTip,MAX(act_time)FROMusers_loginGROUPBYlogin_id; 但是这样是不出用户登录记录中时间最大的那个 ip , 仅仅只是查到...

    在项目中要查询用户最近登录的一条记录的 ip

    直接写如下 SQL: 

    1

    SELECT ip,MAX(act_time) FROM users_login GROUP BY login_id;

    但是这样是取不出用户登录记录中时间最大的那个 ip , 仅仅只是查到了最大时间,和 ip 没关系

    找了相当多的文章,经过自己测试,发现一个比较好的方式处理这个问题,举例如下:

    现在假设有一张数据表 A , 字段和数据如下:

    姓名(name) 身份证(唯一标识)(id) 购买产品(pro) 价格(price) 数量(count) 购买时间(time)
    张1 111111 Computer 1600 5 2018-03-03
    张1 11111 Phone 12     12   2018-03-05
    张2 22222 Pipe 1 234 2018-03-04
    张2 22222 Computer 1600 5 2018-03-05
    张3 33333 Phone 12 12 2018-03-03
    张3 33333 Pipe 1 234 2018-03-06
    张3 33333 Computer 1600   5 2018-03-09
    张4 44444 Phone 12 12 2018-03-09
    张5 55555 Pipe 1 234 2018-03-02

     

    在这张数据表中,我们需要查询表中每一个用户在最后一次都购买了什么产品以及相关信息

    SQL语句如下:

    1

    SELECT from (SELECT FROM ORDER BY time) a GROUP BY a.id;

     如果只查询结果集的第一条记录后边直接写 limit 1 就OK了

    SQL语句如下:

    select * from A order by time limit 1;

    解释:

    在这里,我们首先对 A 表进行按照时间的顺序排序,这样我们可以把每个用户最后一次购买记

    录排在最上面,排序之后再嵌套一层查询,这一层查询使用  GROUP BY 语句。在使用GROUP 

    BY 语句的时候,他会按照分组将你排过序的数据的第一条取出来,这样就比较符合条件了,这种

    方式在添加索引的情况下效率相当快

    展开全文
  • oracle和mysql分组排序取第一条数据

    千次阅读 2018-12-28 13:34:38
    查每个人的Orderstr 是1 的数据,并保证name不重复 oracle select *  from (SELECT a.*, row_number() over(partition by ida order by orderstr) rn  FROM (select orderstr, name, ida from test) a ) where.....

    场景

    需求

    查每个人的Orderstr 是1 的数据,并保证name不重复

    oracle

    select *
      from (SELECT a.*, row_number() over(partition by ida order by orderstr) rn
              FROM (select orderstr, name, ida from test) a )
    where rn = 1 ;

    结果

     

    mysql

    按 员工号STAFF_ID 分组 按  时间START_TIME  排序 取每个员工最新数据

    select SUBSTRING_INDEX(group_concat(STAFF_ID order by START_TIME asc),',',1) as STAFF_ID,START_TIME
    from t_acc_user_accommodation a GROUP BY  STAFF_ID;

     

     

     

     

    展开全文
  • 今天遇到一个问题,将...在group by的时候的是每一组的第一条; 实验二: 依旧是的该组的第一条数据 测试代码如下: DROP TABLE IF EXISTS `test0511`; CREATE TABLE `test0511` ( `id` int(11) NULL DEFA
  • mysql中,如何到表里的time字段每过分钟就去一条值,比如说11:50 取一条,然后再取一条11:52的数据,11:54,56,58这样的值???
  • 这里只介绍在表数据有顺序可排序(时间,数字大小等)的情况下的分组取第一或最后一数据: https://blog.csdn.net/li_jian_fei/article/details/86162962
  • -- 检查重复code1 select count(identity) num, identity from event_log where code='code1' group by identity having count(identity) > 1 order by num desc 删除重复记录 DELETE FROM event_log ...
  • ...mysql 分组 group by, 排序 记录中,时间最大的一条记录 SELECT A.* FROM test A, (SELECT aid, MAX(day) max_day FROM test GROUP BY aid) B WHERE A.aid = B.aid AND A.day
  • 我有个以下格式构成的表:**ID StationID Status UpdateTime**1 1 xxxx 2014-09-25 00:01:052 1 xxxy 2014-09-25 01:05:183 1...
  • mysql中使用group by进行分组后取时间最近的一条数据,我们可以直接使用MAX()函数来实现 SELECT T2.nick_name as nickName, count(T1.shared_user_id) AS shareNum, max(T1.insert_dt) as insertDt FROM reader_...
  • select * from table_name where column_name=#{xxx} order by column_name limit 1 ; select * from table_name where column_name=#{xxx} order by ...比如 limit 3,是从查出来的结果中 前3数据; 而limit 0,3 是
  • MySQL一时间取一条数据的办法

    千次阅读 2017-05-31 17:55:12
    上面sql是2秒内最小时间对应的纪录,通过group by的方式实现,通过group by floor(chat_time/2) 取整进行筛选这时间内最小的时间,以及对应的纪录,MySQL默认是排序筛选的,条件需要加floor函数,否则就是按照...
  • mysql 分组最新的一条记录

    千次阅读 2019-03-13 13:25:24
    方法:mysql取分组后最新的一记录,下面两种方法. ...一种是先排序,然后在次分组查询(默认第一条),就是最新的一数据了 --推荐,可以 #select * from t_assistant_article as a, (select ma...
  • 在使用phabricator时,有这么...思路是找到第一次改变执行开始情况的记录,那么就要进行分组并找出符合条件的第一条记录。 第一种: SELECT r.* FROM (SELECT * FROM maniphest_transaction where objectPHID in('...
  • update table_name set col_1=xxx where ...更新符合指定条件的第一条记录 UPDATE table_name set col_1=1112 WHERE id=(select temp.id from (select id from table_name WHERE col_2=xxx order by create_tim...
  • Mysql 分组里更新时间最近的一条

    千次阅读 2019-04-19 17:00:18
    MySQL取分组里更新时间最近的一 首先把要的那记录用group_concat函数拼接起来放在第一位 SELECT group_concat(id ORDER BY updated_at DESC) FROM apps GROUP BY bundle_id 然后使用...
  • 利用mysql8.0的窗口函数 select * from( select row_number() over (partition by 分组字段 order by 排序字段 desc) as rn,u.* from 表名 u ) t where t.rn=1; 例如: select * from( select row_number()...
  • MySQL用GROUP BY分组最新一条数据

    千次阅读 2020-08-26 14:29:01
    因为group by后的一数据默认是按主键id排序后的第一条, 而且mysql查询语句是先执行group by再执行order by的。 所以无法直接 group by 后 创建时间最新的数据。 本来以为这样写可以先按create_time 倒序,再...
  • 如果要在某个时间段内每隔五分钟取一条数据,sql语句: SELECT Speed,DateTime FROM pos_history WHERE DATE_FORMAT(DateTime,'%i')%5 = 0 AND DateTime >= FROM_UNIXTIME(1554219000) AND DateTime <= FROM_...
  • 通常情况下我们需要按照某个条件分组后取出最大或者最小的一(N)数据,然而mysql默认会取出分组之前的某数据第一次出现的位置,并不会取出最大或者最小的,例如test表中数据如下 id | name value ---|-----...
  • 下个SQL 的主要目的是获取每个项目的最近的个里程碑记录 SELECT milestone.id ,milestone.projId,milestone.validTime FROM (SELECT * FROM proj_milestone WHERE STATUS =0 ORDER BY validTime ASC) AS milestone...
  • 状态为表1中的用户状态,最新编辑时间为表2中最后次编辑时间1为users, 表2为opt_user_log 例: SELECT u.id, u.user_name, u.last_upd_time AS audit_time, u.state, suo.opt_user_name FROM users ...
  • select ip, created_at, customer_id from (select * from customer_activity_log where op_code = 2000 GROUP BY customer_id ,created_at desc) as base group by customer_id
  • mysql leftjoin只取一条的方法

    万次阅读 2019-05-05 15:56:36
    根据时间匹配,需要找到关联的记录表里, 在主表时间之前的第一条记录 查了下百度,有的根据leftjoin子查询里面row_number做的. 但是leftjoin的子查询不能引用其他表 最后还是查谷歌找到了解决办法 ...
  • SELECT c.time,MIN(c.band) mi ... SELECT a.bandwidth band,a.create_time time FROM tb1 a LEFT JOIN tb1 b ON a.create_time = b.create_time AND a.bandwidth < b.bandwidth WHERE a.create_time BETWEE...
  • 方法:mysql取分组后最新的一记录,下面两种方法.一种是先筛选 出最大和...一种是先排序,然后在次分组查询(默认第一条),就是最新的一数据了 #select * from t_assistant_article as a, (select max(base_...
  • mysql取分组后最新的一条记录

    千次阅读 2019-01-09 16:58:18
    一种是先排序,然后在次分组查询(默认第一条),就是最新的一数据了 #select * from t_assistant_article as a, (select max(base_id) as base_id, max(create_time) as create_time from t_assist...
  • mysql如何取时间

    千次阅读 2016-09-06 17:04:03
    当前时间的前后两天(格式为 YYYY-MM-DD’ ): select adddate(curdate(), '-2 days'); select adddate(curdate(), '+2 days'); select curdate() + INTERVAL -2 DAY ; select curdate() + INTERVAL ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 119,251
精华内容 47,700
关键字:

mysql根据时间取第一条

mysql 订阅