SQL查询同一张表下对某一个字段分组后某一字段进行排序

需求:获取一张表的每一个组的最新一条数据

-- ----------------------------
-- 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

两种方式有区别。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章