group by查询每组时间最新的一条记录

错误写法,having time = max(time)在分组之后执行,查询出来只有一条满足条件的数据。having过滤的是组,在order by之后执行

        select id,userId,userFlag,lontitude,latitude,time,addr,locationdescribe
        from user_position
        group by userId
        having time = max(time)
        and userId in (select id from users where group_code=(select group_code from users where id = #{userId}))
        ORDER BY time desc

数据格式

详细步骤

1.查询出分组的所有按时间降序的记录id并拼接

--查询出分组的所有按时间降序的记录id并拼接
select group_concat(id order by `time` desc) from user_position group by userId

结果

2.查询每个分组中时间最新的那条记录的id

--查询每个分组中时间最新的那条记录的id
select SUBSTRING_INDEX(group_concat(id order by `time` desc),‘,‘,1) from user_position group by userId

结果

3.所有成员最新一条记录

select * from user_position as t
where t.id in
(
select SUBSTRING_INDEX(group_concat(id order by `time` desc),‘,‘,1) from user_position
 group by userId
) 

4.根据id所在组查询组成员最新数据

select * from user_position as t
where t.id in
(
select SUBSTRING_INDEX(group_concat(id order by `time` desc),‘,‘,1) from user_position
 where userId in (select id from users where group_code=(select group_code from users where id = ‘qyid1‘))
 group by userId
) 

结果

巨坑

分组不是取数据的第一条!!!

select *
from user_position as u 

查询结果

select *
from user_position as u
group by u.userId 

分组后,确实取的第一条

但是!!!

select *
from (
select * from user_position order by userId,time desc
) as u
group by u.userId 

网上这种先排序再分组的,结果和上面一样!!!并没有取第一条!!!

参考:

https://www.cnblogs.com/Alight/p/3425357.html

https://www.jb51.net/article/23969.htm

原文地址:https://www.cnblogs.com/aeolian/p/9359898.html

时间: 2024-10-12 03:00:10

group by查询每组时间最新的一条记录的相关文章

取重复记录中时间最新的一条记录Oracle sql语句

WITH t1 AS ( SELECT YLPLID,MAX(SBSJ) SBSJ FROM YLPLCG where YLPLID in(select YLPLID from CYQYCPYLPLGX where CPID='659DE0BC42544B74B660E37E665F437C') group by YLPLID )   SELECT t.YLPLMC,case when t.YLPLLX =1 then '原料' when t.YLPLLX = 2 then '配料' end Y

数据库的一个表里筛选出每一人的时间最新的一条记录

-- 方法1 select a.* from table1 a where not exists(select 1 from table1 b where b.name=a.name and b.gdtime>a.gdtime) -- 方法2 select a.* from table1 a inner join (select name, max(gdtime) 'maxgdtime' from table1 group by name) b on a.name=b.name and a.gd

Oracle:查询各组最新的一条记录

oracle中怎么查询各组中最新的一条记录呢?比如说现在有一个表中几条数据如下: 有两种写法:写法一:over partition by 分析函数 SELECT * FROM (select ID_,COMPANY_NAME,USAGE_RATE,DETECTION_RATE,ACCEPTABILITY_RATE,CREATE_TIME,MAX(CREATE_TIME) over(partition by COMPANY_NAME) as "atime" from SPEC_RATE_

SQL分组取每组前一(或几)条记录(排名)

mysql分组取每组前几条记录(排名) 附group by与order by的研究 http://www.jb51.net/article/31590.htm --按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3:a的第三个值 b 1 b1--b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b 5 b5b5b5b5b5 */ --创建表

工作 巧遇 sql 查询 一组数据中 最新的一条

SELECT * FROM rsl a, (SELECT CODE, max(time_key) time_key FROM rsl GROUP BY CODE ) b WHERE a. CODE = b. CODE AND a.time_key = b.time_key AND a. CODE IN ('HK.00700', 'HK.03888'); table :rsl 然后查询出根据每一种的code 中最新的一组数据

【mysql】查询最新的10条记录

实现查询最新10条数据方法: select * from 表名 order by id(主键) desc limit 10 参考文档: MySQL查询后10条数据并顺序输出 原文地址:https://www.cnblogs.com/kaerxifa/p/11746643.html

mysql分组查询获取组内某字段最大的记录

id sid cid 1 1 12 1 23 2 1 以sid分组,最后取cid最大的那一条,以上要取第2.3条 1 方法一: 2 select * from (select * from table order by cid desc) as a group by a.sid 3 4 方法二: 5 select a.* from table as a where cid = (select max(cid) from table where a.sid = sid) 6 7 方法三: 8 se

sql语句查询出表里符合条件的第二条记录的方法

创建用到的表的SQL CREATE TABLE [dbo].[emp_pay]( [employeeID] [int] NOT NULL, [base_pay] [money] NOT NULL, [commission] [decimal](2, 2) NOT NULL ) ON [PRIMARY] 生成的表,及表中的数据: --方法一 select top 1 * from ( SELECT TOP 2 * FROM [dbo].[emp_pay] WHERE base_pay = 500

怎么查询数据库中第30到40条记录呢? 通过ID,查询当前第30-40条记录 注意,ID不是顺序的

http://blog.csdn.net/lee576/article/details/5812347 http://bbs.csdn.net/topics/190070614