最近在做统计查询的时候经常遇到查询每个人每天或者每月最后一条数据, 在百度查询也没有找到很好的解决方法, 有看到很多人都采用第一种错误的方法

原始数据表图如下:
tb_heart_data数据表
注: 后面三条为同一天不同时间的数据

错误写法:

SELECT device_order_id,age,VALUE,MAX(create_time) create_time FROM tb_heart_data GROUP BY device_order_id 

来看运行结果:
你会发现 最后一个日期对应的数据是不对 的, 是第一个日期的值, 所以这种写法不行!!!!!!!!
运行效果

来看下正确的写法
先按时间倒序排列,再按照人的id分组,因为分组查询会默认查询第一条数据

SELECT t.* FROM ( SELECT * FROM tb_heart_data ORDER BY create_time DESC) t GROUP BY device_order_id

来看运行结果:
日期和数据是一 一对应的, 当然在大数据处理中速度会是硬伤
正确结果

来看另外一种解决方法:
先查询出最大的时间对应的id ,然后关联自己 查询, 这样过过滤掉一部分无用的信息, 数据量会少一些

    -- 自己join自己的最大时间 就是最后一条数据
 select a.device_order_id, a.age, a.value, a.create_time from tb_heart_data a
      JOIN (
          -- 先查询出最后一条数据的时间
        select device_order_id, MAX(create_time) create_time from tb_heart_data
        GROUP BY device_order_id
      ) b on a.device_order_id = b.device_order_id and a.create_time = b.create_time  
最近在做统计查询的时候经常遇到查询每个人每天或者每月最后一条数据, 在百度查询也没有找到很好的解决方法, 有看到很多人都采用第一种错误的方法原始数据表图如下: 注: 后面三条为同一天不同时间的数据错误写法:SELECT device_order_id,age,VALUE,MAX(create_time) create_time FROM tb_heart_data GROU...
包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar包含mysql-connector-java-8.0.22.jar
SQLite3到MySQL 一个简单的Python工具,可将数据从SQLite 3传输到MySQL。 我最初将此简单程序编写为独立脚本,然后将其作为,以解决此。 从那时起,由于它是如此简单且有效,因此许多人对此产生了兴趣。 因此,我终于搬走了懒骨头,制作了一个GitHub存储库 :octopus: 。 pip install sqlite3-to-mysql sqlite3mysql --help Usage: sqlite3mysql [OPTIONS] Transfer SQLite to MySQL using the provided CLI options. Options: -f, --sqlite-file PATH SQLite3 database file [required] -t, --sqlite-tables TEXT Transfer only these specific tables (space separated table names). Im
MySQL到SQLite3 一个简单的Python工具,可将数据MySQL传输到SQLite 3。 这是我的早该应得的免费工具。 它将所有数据MySQL数据库传输到SQLite3数据库。 pip install mysql-to-sqlite3 mysql2sqlite --help Usage: mysql2sqlite [OPTIONS] Transfer MySQL to SQLite using the provided CLI options. Options: -f, --sqlite-file PATH SQLite3 database file [required] -d, --mysql-database TEXT MySQL database name [required] -u, --mysql-user TEXT MySQL user [required] -p, --mysql-password TEXT MySQL password -t, --mysql-tables TEXT
mysql-mongodb go-mysql-mongodb是一项将MySQL数据自动同步到MongoDB的服务。 它首先使用mysqldump来获取原始数据,然后与binlog增量同步数据。 安装Go( )并设置您的 go get github.com/WangXiangUSTC/go-mysql-mongodb ,它将在控制台中打印一些消息,跳过它。 :-) cd $GOPATH/src/github.com/WangXiangUSTC/go-mysql-mongodb 如何使用? 在MySQL中创建表。 配置基础,请参阅示例config 。 在配置文件中设置MySQL源,请参见下面的。 在配置文件中自定义MySQL和MongoDB映射规则,请参阅下面的。 启动./bin/go-mysql-mongodb -config=./etc/river
分组查询 我们的需求是统计每天最后一次的变动记录,而不仅仅是变动时间,所以这里仅仅使MAX和GROUP BY是没有办法达到我们的需求的。 这个时候,我们就可以使用GROUP_CONCAT和GROUP BY。 GROUP_CONCAT 作用:将GROUP产生的同一个分组中的值连接起来,返回一个字符串。 语法:GROUP_CONCAT( [.. where 时间字段<= #{date} and (时间字段= last_day(时间字段) or 时间字段= #{date}) and year(时间字段)=year(#{date}) group by 字段名;
获取group by最后一条记录创建测试表插入数据查看数据解决方案 创建测试表 create table login_log (id int primary key auto_increment, uid int, login_at datetime, login_device varchar(16)) 插入数据 INSERT INTO `login_log` (`id`, `uid`, `login_at`, `login_device`) VALUES (1, 1, '2022-04-01 14:34
要删除表内11-20条数据MySQL语句,可以使用LIMIT子句实现。LIMIT子句用于限制从表中选择的记录数量。 假设你有一个名为table_name的表,你可以使用以下语句删除表内11-20条数据: DELETE FROM table_name ORDER BY id LIMIT 10 OFFSET 10; 上述语句中,我们首先使用ORDER BY子句按照表中的id字段进行排序。然后,我们使用LIMIT子句来指定我们要删除的记录数量为10条。OFFSET关键字指定从排序结果的第11条记录开始删除,即跳过前面的10条记录。 需要注意的是,上述语句的具体语法和关键字可能因MySQL版本的不同而有所变化。请根据你使用的MySQL版本来调整语句,确保语句能够正确执行。 ### 回答3: 要删除MySQL表中的11-20条数据,可以使用LIMIT子句来实现。下面是一个示例的MySQL语句: DELETE FROM 表名 WHERE 条件 LIMIT 10, 10; 解释如下: - `表名`是你要删除数据的表的名称。 - `条件`是一个可选的条件,用于指定删除数据的条件。如果不需要特定的条件,可以省略这部分。 - `LIMIT 10, 10`表示从第11条开始删除10条数据。第一个参数10表示要跳过的行数(即要跳过前10条数据),第二个参数10表示要删除的行数(即删除从第11条开始的10条数据)。 请注意,执行这个删除语句前一定要确认没有其他用户正在访问或操作该表,以免数据丢失或引发其他问题。建议在执行删除操作前先备份数据以防万一。