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

兩種方式有區別。

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