需求:获取一张表的每一个组的最新一条数据
-- ----------------------------
-- Table structure for t_test
-- ----------------------------
DROP TABLE IF EXISTS `t_test`;
CREATE TABLE `t_test` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`group_id` int(11) NOT NULL COMMENT '组ID',
`reading` decimal(16, 2) NOT NULL COMMENT '读数',
`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '状态',
`create_time` datetime(0) NOT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '创建时间',
`operater_user` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '操作人',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 75 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '测试表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_test
-- ----------------------------
INSERT INTO `t_test` VALUES (57, 141, 0.04, '1', '2019-08-06 16:36:04', NULL);
INSERT INTO `t_test` VALUES (56, 140, 0.09, '1', '2019-08-06 16:36:04', NULL);
INSERT INTO `t_test` VALUES (55, 139, 0.08, '1', '2019-08-06 16:36:04', NULL);
INSERT INTO `t_test` VALUES (54, 138, 0.16, '1', '2019-08-06 16:36:03', NULL);
INSERT INTO `t_test` VALUES (53, 137, 0.02, '1', '2019-08-06 16:36:03', NULL);
INSERT INTO `t_test` VALUES (52, 135, 1.14, '1', '2019-08-06 16:36:03', NULL);
INSERT INTO `t_test` VALUES (51, 134, 0.13, '1', '2019-08-06 16:36:03', NULL);
INSERT INTO `t_test` VALUES (50, 133, 0.12, '1', '2019-08-06 16:36:03', NULL);
INSERT INTO `t_test` VALUES (70, 137, 0.02, '1', '2019-08-06 17:39:53', NULL);
INSERT INTO `t_test` VALUES (48, 141, 0.04, '0', '2019-08-06 16:32:39', NULL);
INSERT INTO `t_test` VALUES (47, 140, 0.09, '0', '2019-08-06 16:32:39', NULL);
INSERT INTO `t_test` VALUES (46, 139, 0.08, '0', '2019-08-06 16:32:39', NULL);
INSERT INTO `t_test` VALUES (45, 138, 0.16, '0', '2019-08-06 16:32:39', NULL);
INSERT INTO `t_test` VALUES (44, 137, 0.02, '0', '2019-08-06 16:32:38', NULL);
INSERT INTO `t_test` VALUES (43, 135, 1.14, '0', '2019-08-06 16:32:38', NULL);
INSERT INTO `t_test` VALUES (42, 134, 0.13, '0', '2019-08-06 16:32:38', NULL);
INSERT INTO `t_test` VALUES (41, 133, 0.12, '0', '2019-08-06 16:32:38', NULL);
INSERT INTO `t_test` VALUES (69, 135, 1.19, '1', '2019-08-06 17:39:53', NULL);
INSERT INTO `t_test` VALUES (68, 134, 0.13, '1', '2019-08-06 17:39:53', NULL);
INSERT INTO `t_test` VALUES (32, 133, 0.12, '0', '2019-08-06 16:29:52', NULL);
INSERT INTO `t_test` VALUES (33, 134, 0.13, '0', '2019-08-06 16:29:52', NULL);
INSERT INTO `t_test` VALUES (34, 135, 1.14, '0', '2019-08-06 16:29:52', NULL);
INSERT INTO `t_test` VALUES (35, 137, 0.02, '0', '2019-08-06 16:29:53', NULL);
INSERT INTO `t_test` VALUES (36, 138, 0.16, '0', '2019-08-06 16:29:53', NULL);
INSERT INTO `t_test` VALUES (37, 139, 0.08, '0', '2019-08-06 16:29:53', NULL);
INSERT INTO `t_test` VALUES (38, 140, 0.09, '0', '2019-08-06 16:29:53', NULL);
INSERT INTO `t_test` VALUES (39, 141, 0.04, '0', '2019-08-06 16:29:53', NULL);
INSERT INTO `t_test` VALUES (67, 133, 0.12, '1', '2019-08-06 17:39:53', NULL);
INSERT INTO `t_test` VALUES (59, 133, 0.12, '0', '2019-08-06 17:35:42', NULL);
INSERT INTO `t_test` VALUES (60, 134, 0.13, '0', '2019-08-06 17:35:42', NULL);
INSERT INTO `t_test` VALUES (61, 135, 1.19, '0', '2019-08-06 17:35:42', NULL);
INSERT INTO `t_test` VALUES (62, 137, 0.02, '0', '2019-08-06 17:35:43', NULL);
INSERT INTO `t_test` VALUES (63, 138, 0.16, '0', '2019-08-06 17:35:43', NULL);
INSERT INTO `t_test` VALUES (64, 139, 0.08, '0', '2019-08-06 17:35:43', NULL);
INSERT INTO `t_test` VALUES (65, 140, 0.09, '0', '2019-08-06 17:35:43', NULL);
INSERT INTO `t_test` VALUES (66, 141, 0.04, '0', '2019-08-06 17:35:43', NULL);
INSERT INTO `t_test` VALUES (71, 138, 0.16, '1', '2019-08-06 17:39:53', NULL);
INSERT INTO `t_test` VALUES (72, 139, 0.08, '1', '2019-08-06 17:39:53', NULL);
INSERT INTO `t_test` VALUES (73, 140, 0.09, '1', '2019-08-06 17:39:54', NULL);
INSERT INTO `t_test` VALUES (74, 141, 0.04, '1', '2019-08-06 17:39:54', NULL);
SET FOREIGN_KEY_CHECKS = 1;
查询根据group_id的最新一条数据:
第一种方法:
select a.group_id AS groupId, a.reading AS reading , a.create_time AS createTime from t_test a where not exists(select 1 from t_test b where b.group_id=a.group_id and b.create_time>a.create_time)
第二种方法:
SELECT ds.* FROM t_test AS ds, ( SELECT max(id) AS id FROM t_test ids GROUP BY group_id ) AS b WHERE ds.id = b.id ORDER BY ds.create_time DESC
两种方式有区别。