获取MySQL的表中每个userid最后一条记录的方法

如下表:

CREATE TABLE `t1` (
`userid` int(11) DEFAULT NULL,
`atime` datetime DEFAULT NULL,
KEY `idx_userid` (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `t1` (
`userid` int(11) DEFAULT NULL,
`atime` datetime DEFAULT NULL,
KEY `idx_userid` (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

数据如下:

MySQL> select * from t1;
+--------+---------------------+
| userid | atime |
+--------+---------------------+
| 1 | 2013-08-12 11:05:25 |
| 2 | 2013-08-12 11:05:29 |
| 3 | 2013-08-12 11:05:32 |
| 5 | 2013-08-12 11:05:34 |
| 1 | 2013-08-12 11:05:40 |
| 2 | 2013-08-12 11:05:43 |
| 3 | 2013-08-12 11:05:48 |
| 5 | 2013-08-12 11:06:03 |
+--------+---------------------+
8 rows in set (0.00 sec)

MySQL> select * from t1;
+--------+---------------------+
| userid | atime |
+--------+---------------------+
| 1 | 2013-08-12 11:05:25 |
| 2 | 2013-08-12 11:05:29 |
| 3 | 2013-08-12 11:05:32 |
| 5 | 2013-08-12 11:05:34 |
| 1 | 2013-08-12 11:05:40 |
| 2 | 2013-08-12 11:05:43 |
| 3 | 2013-08-12 11:05:48 |
| 5 | 2013-08-12 11:06:03 |
+--------+---------------------+
8 rows in set (0.00 sec)

其中userid不唯一,要求取表中每个userid对应的时间离现在最近的一条记录.初看到一个这条件一般都会想到借用临时表及添加主建借助于join操作之类的.
给一个简方法:

MySQL> select userid,substring_index(group_concat(atime order by atime desc),",",1) as atime from t1 group by userid;
+--------+---------------------+
| userid | atime |
+--------+---------------------+
| 1 | 2013-08-12 11:05:40 |
| 2 | 2013-08-12 11:05:43 |
| 3 | 2013-08-12 11:05:48 |
| 5 | 2013-08-12 11:06:03 |
+--------+---------------------+
4 rows in set (0.03 sec)

MySQL> select userid,substring_index(group_concat(atime order by atime desc),",",1) as atime from t1 group by userid;
+--------+---------------------+
| userid | atime |
+--------+---------------------+
| 1 | 2013-08-12 11:05:40 |
| 2 | 2013-08-12 11:05:43 |
| 3 | 2013-08-12 11:05:48 |
| 5 | 2013-08-12 11:06:03 |
+--------+---------------------+
4 rows in set (0.03 sec)

Good luck!

(0)

相关推荐

  • MySQL之Field‘***’doesn’t have a default value错误解决办法

    今天,中国博客联盟有博友反馈,zgboke.com无法提交博客,当时我正好准备去假日广场聚会,就匆匆忙忙的提交试了下,发现提交博客的时候确实报如下错误: 提示web_pic不能为空值.很纳闷,之前都可以成功提交的,为什么突然不行了?看了下网上的案例,说是需要修改MySQL的配置什么的,但是目前博客联盟是挂在京东云擎的,数据库不能修改配置,按理说之前可以正常提交,后面应该也可以才对啊! 由于聚会时间快到了,就先放在一边了.回到家之后,对比了下网上的类似案例,原来是web_pic这个键值设置了不为空

  • Windows下使用Cygwin编译MySQL客户端

    MinTTY 是一个小巧但却很实用的 Cygwin 终端机,但有个严重的问题就是无法调用交互性的 Windows 原生程序,比如说 mysql.exe,当你在 MinTTY 中输入如下的命令: 复制代码 代码如下: $ mysql -uroot -p 本来 mysql.exe 会提示输入密码,但在 MinTTY 中程序会直接挂起,不再响应,实际上即使在 -p 参数后面跟上密码,也是一样的. 某些程序,比如 python,会提供参数 -i,使自身在终端中进入交互模式,可惜并非所有的程序都有这样的参

  • MySQL数据库优化推荐的编译安装参数小结

    MySQL编译参数多而复杂,让新手感到很头大,如果是正式生成环境安装MySQL,没有充足的时间去研究每一个参数代表的意义,个人建议使用余洪春前辈整理的编译参数,便捷高效! MySQL的线上安装建议采取编译安装的方法,这样性能上有较大提升,,源码包的编译参数会默认以Debgu模式生成二进制代码,而Debug模式给MySQL带来的性能损失是比较大的,所以当我们编译准备安装的产品代码时,一定不要忘记使用"-without-debug"参数禁用Debug模式. 而如果把-with-mysqld

  • 获取MySQL的表中每个userid最后一条记录的方法

    如下表: CREATE TABLE `t1` ( `userid` int(11) DEFAULT NULL, `atime` datetime DEFAULT NULL, KEY `idx_userid` (`userid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8: CREATE TABLE `t1` ( `userid` int(11) DEFAULT NULL, `atime` datetime DEFAULT NULL, KEY `idx_userid

  • mysql删除表中某一字段重复的记录

    比如,表:event(id int(10) auto_increment primary key,                 sid int(10)not null,                 detail text) 我想删除表event中sid重复的记录,请问有没有这样SQL语句?或是通过其它方法? 复制代码 代码如下: delete from event as e  where id != (select min(id) from event where sid=e.sid);

  • Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法

    本文实例讲述了Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf-8 -*- """ Purpose: 生成日汇总对账文件 Created: 2015/4/27 Modified:2015/5/1 @author: guoyJoe """ #导入模块 import MySQLdb import time impor

  • c++获取sqlite3数据库表中所有字段的方法小结

    常用方法: 1.使用sqlite3_get_table函数 2.获取sqlite创建表的sql语句字符串,然后进行解析获取到相应的字段 3.采用配置文件的方式,将所有字段名写入配置文件 下面针对这三个方法给大家逐一详细介绍. 方法1:使用sqlite3_get_table函数 代码: char *dbname = "test.db"; int rc = sqlite3_open(dbname, &db); if (rc == SQLITE_OK) { char sql[256]

  • 如何使用MySQL一个表中的字段更新另一个表中字段

    1,修改1列 update student s, city c set s.city_name = c.name where s.city_code = c.code; 2,修改多个列 update a, b set a.title=b.title, a.name=b.name where a.id=b.id •子查询 update student s set city_name = (select name from city where code = s.city_code); oracle

  • Mysql将一个表中的某一列数据复制到另一个表中某一列里的方法

    mysql复制表中的一列到另一个表中 有时候,我们需要复制某个字段一整列的数据到另外一个新的字段中,这很简单,SQL可以这么写: UPDATE tb_1 SET content_target = content_source; 大概写法如下: Update {your_table} set {source_field} = {object_field} WHERE cause 有Navicat等工具更好,可以直接选中一列数据,拷贝粘贴到你需要的列中.如果是同一个表那没什么问题,如果是新表,请保持

  • Mysql数据表中的蠕虫复制使用方法

    mysql蠕虫复制,简单来说就是将查询出来的数据不断的新增插入到指定的数据表中.通常情况,mysql蠕虫复制时用来测试表压力. 下面我们就结合简单的实例给大家介绍mysql数据表中蠕虫复制的使用. 首先我们可以先查询下已有的money表中的信息字段,表信息如下图. 蠕虫复制的基本语法: insert into + 数据表名 +字段列表/* + from 数据表名; 使用示例语句: insert into money select null,name,money from money; 然后我们使

  • Mysql数据库表中为什么有索引却没有提高查询速度

    背景 时间过得太快了,春节假期感觉光速般就结束了,转眼间就要继续搬砖上班了.紧接着很快就要进入金三银四的求职面试高峰期,程序猿小枫还没有找到令自己感到满意的工作.就算是在过年放假期间也在拼命的准备技术面试,这不他又梳理了下之前面试过程中面试官经常问到的关于数据库方面的一道面试题,我们来一起帮小枫看看有没有遗漏的地方吧. 面试题目--问题 面试官:看你的简历中有提到过曾经进行过索引优化的工作,那我就问问你,假设数据库表中有索引,但是进行SQL数据查询还是很慢,这种情况下应该怎么分析查询慢的原因?

  • MySQL数据库表中的约束详解

    目录 MySQL表中的约束(constraint) 约束分类 非空约束 唯一性约束 复合约束 主键约束 自增列-AUTO_INCREMENT 外键约束FOREIGN KEY约束 CHECK约束 DEFAULT约束 MySQL表中的约束(constraint) 为了保证数据的完整性,(数据的精确性和可靠性) SQL规范以约束的方式对表数据进行额外的条件限制,可从以下四个方面进行考虑 实体完整性 域完整性 引用完整性 用户自定义完整性 约束?对表中字段的限制. 约束分类 约束作用字段的个数 单列约束

  • PHP实现在数据库百万条数据中随机获取20条记录的方法

    本文实例讲述了PHP实现在数据库百万条数据中随机获取20条记录的方法.分享给大家供大家参考,具体如下: 额,为什么要写这个? 在去某个公司面试时,让写个算法出来,当时就蒙了,我开发过程中用到算法的吗?又不是大数据开发,分析. 今天偶然想起来一个坑爹数据,如:PHP取百万条数据中随机20条记录,当时就用的算法. 1.先统计统计数据库多少条记录(这个做个数据缓存,如1小时重新统计一次), 2.根据总条数,随机1次,1次性取出20条记录(当然这个就相当于分页了,要求不高的话,这个最快,我用的就是这个)

随机推荐