mysql 分組,獲取每組前幾條記錄數據

最近項目中碰到一個統計最近五週不同區域用電量報表。

上面是需要,實際轉爲mysql中對數據進行分組,然後再獲取每組的前幾條記錄。

功能效果如下:

下面是表結構:

 表結構和表數據sql腳本如下:

DROP TABLE IF EXISTS `electrics`;
CREATE TABLE `electrics`  (
  `eid` int(0) NOT NULL AUTO_INCREMENT COMMENT '電能id',
  `fid` int(0) NULL DEFAULT NULL COMMENT '工廠id',
  `departname` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '區域名',
  `energy` decimal(10, 2) NULL DEFAULT NULL COMMENT '耗能',
  `energytime` datetime(0) NULL DEFAULT NULL COMMENT '耗能月份',
  `createtime` datetime(0) NULL DEFAULT NULL COMMENT '創建時間',
  `status` int(0) NULL DEFAULT NULL COMMENT '狀態',
  `week` int(0) NULL DEFAULT 0 COMMENT '第幾週數',
  PRIMARY KEY (`eid`) USING BTREE,
  INDEX `FK_Reference_4`(`fid`) USING BTREE,
  CONSTRAINT `FK_Reference_4` FOREIGN KEY (`fid`) REFERENCES `factorys` (`fid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 76 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '電能' ROW_FORMAT = Dynamic;

表數據:

INSERT INTO `electrics` VALUES (1, 1, '中央空調', 1707.18, '2021-11-01 00:00:00', '2021-12-01 16:43:42', 1, 40);
INSERT INTO `electrics` VALUES (2, 1, '線裝', 8873.79, '2021-11-01 00:00:00', '2021-12-01 16:46:10', 1, 40);
INSERT INTO `electrics` VALUES (3, 1, '自動化', 3232.41, '2021-11-01 00:00:00', '2021-12-01 17:23:50', 1, 40);INSERT INTO `electrics` VALUES (9, 1, '辦公區', 992.01, '2021-11-01 00:00:00', '2021-12-07 11:47:57', 1, 40);
INSERT INTO `electrics` VALUES (10, 1, '空壓機', 5121.84, '2021-11-01 00:00:00', '2021-12-07 11:48:18', 1, 40);
INSERT INTO `electrics` VALUES (11, 1, '電梯', 53.06, '2021-11-01 00:00:00', '2021-12-07 11:48:43', 1, 40);
INSERT INTO `electrics` VALUES (12, 1, '加工中心', 2302.69, '2021-11-01 00:00:00', '2021-12-07 11:49:37', 1, 40);
INSERT INTO `electrics` VALUES (13, 1, '自動化', 4304.69, '2021-11-01 00:00:00', '2021-12-07 11:50:18', 1, 41);
INSERT INTO `electrics` VALUES (14, 1, '線裝', 7030.03, '2021-11-01 00:00:00', '2021-12-07 11:51:32', 1, 41);
INSERT INTO `electrics` VALUES (15, 1, '辦公區', 1923.07, '2021-11-01 00:00:00', '2021-12-07 11:51:52', 1, 41);
INSERT INTO `electrics` VALUES (16, 1, '空壓機', 5014.48, '2021-11-01 00:00:00', '2021-12-07 11:52:13', 1, 41);
INSERT INTO `electrics` VALUES (17, 1, '電梯', 59.98, '2021-11-01 00:00:00', '2021-12-07 11:53:21', 1, 41);
INSERT INTO `electrics` VALUES (18, 1, '中央空調', 230.70, '2021-11-01 00:00:00', '2021-12-07 11:53:43', 1, 41);
INSERT INTO `electrics` VALUES (19, 1, '加工中心', 2749.01, '2021-11-01 00:00:00', '2021-12-07 11:54:01', 1, 41);
INSERT INTO `electrics` VALUES (20, 1, '自動化', 2063.53, '2021-11-01 00:00:00', '2021-12-07 11:54:42', 1, 42);
INSERT INTO `electrics` VALUES (21, 1, '線裝', 6151.53, '2021-11-01 00:00:00', '2021-12-07 11:54:59', 1, 42);
INSERT INTO `electrics` VALUES (22, 1, '辦公區', 1016.62, '2021-11-01 00:00:00', '2021-12-07 11:55:22', 1, 42);
INSERT INTO `electrics` VALUES (23, 1, '空壓機', 4875.76, '2021-11-01 00:00:00', '2021-12-07 11:55:59', 1, 42);
INSERT INTO `electrics` VALUES (24, 1, '電梯', 59.98, '2021-11-01 00:00:00', '2021-12-07 11:56:19', 1, 42);
INSERT INTO `electrics` VALUES (25, 1, '中央空調', 92.28, '2021-11-01 00:00:00', '2021-12-07 11:56:40', 1, 42);
INSERT INTO `electrics` VALUES (26, 1, '加工中心', 1857.44, '2021-11-01 00:00:00', '2021-12-07 11:57:02', 1, 42);
INSERT INTO `electrics` VALUES (27, 1, '自動化', 2045.84, '2021-11-01 00:00:00', '2021-12-07 11:57:27', 1, 43);
INSERT INTO `electrics` VALUES (28, 1, '線裝', 8853.80, '2021-11-01 00:00:00', '2021-12-07 11:57:47', 1, 43);
INSERT INTO `electrics` VALUES (29, 1, '辦公區', 1045.84, '2021-11-01 00:00:00', '2021-12-07 11:58:16', 1, 43);
INSERT INTO `electrics` VALUES (30, 1, '空壓機', 4814.24, '2021-11-01 00:00:00', '2021-12-07 11:58:39', 1, 43);
INSERT INTO `electrics` VALUES (31, 1, '電梯', 62.29, '2021-11-01 00:00:00', '2021-12-07 11:58:58', 1, 43);
INSERT INTO `electrics` VALUES (32, 1, '中央空調', 138.42, '2021-11-01 00:00:00', '2021-12-07 11:59:18', 1, 43);
INSERT INTO `electrics` VALUES (33, 1, '加工中心', 1766.69, '2021-11-01 00:00:00', '2021-12-07 11:59:37', 1, 43);
INSERT INTO `electrics` VALUES (34, 1, '自動化', 1932.80, '2021-11-01 00:00:00', '2021-12-07 11:59:53', 1, 44);
INSERT INTO `electrics` VALUES (35, 1, '線裝', 9201.39, '2021-11-01 00:00:00', '2021-12-07 12:00:09', 1, 44);
INSERT INTO `electrics` VALUES (36, 1, '辦公區', 1088.14, '2021-11-01 00:00:00', '2021-12-07 12:00:28', 1, 44);
INSERT INTO `electrics` VALUES (37, 1, '空壓機', 5921.60, '2021-11-01 00:00:00', '2021-12-07 12:00:53', 1, 44);
INSERT INTO `electrics` VALUES (38, 1, '電梯', 46.14, '2021-11-01 00:00:00', '2021-12-07 12:03:51', 1, 44);
INSERT INTO `electrics` VALUES (39, 1, '中央空調', 322.98, '2021-11-01 00:00:00', '2021-12-07 12:04:14', 1, 44);
INSERT INTO `electrics` VALUES (40, 1, '加工中心', 2039.69, '2021-11-01 00:00:00', '2021-12-07 12:04:35', 1, 44);
INSERT INTO `electrics` VALUES (41, 1, '中央空調', 1807.18, '2022-02-28 00:00:00', '2022-03-31 16:57:48', 1, 9);
INSERT INTO `electrics` VALUES (42, 1, '線裝', 8763.79, '2022-02-28 00:00:00', '2022-03-31 16:57:48', 1, 9);
INSERT INTO `electrics` VALUES (43, 1, '自動化', 3232.41, '2022-02-28 00:00:00', '2022-03-31 16:57:48', 1, 9);
INSERT INTO `electrics` VALUES (44, 1, '辦公區', 992.01, '2022-02-28 00:00:00', '2022-03-31 16:57:48', 1, 9);
INSERT INTO `electrics` VALUES (45, 1, '空壓機', 5121.84, '2022-02-28 00:00:00', '2022-03-31 16:57:48', 1, 9);
INSERT INTO `electrics` VALUES (46, 1, '電梯', 51.06, '2022-02-28 00:00:00', '2022-03-31 16:57:48', 1, 9);
INSERT INTO `electrics` VALUES (47, 1, '加工中心', 2002.69, '2022-02-28 00:00:00', '2022-03-31 16:57:48', 1, 9);
INSERT INTO `electrics` VALUES (48, 1, '中央空調', 1707.18, '2022-03-01 00:00:00', '2022-03-31 16:59:17', 1, 10);
INSERT INTO `electrics` VALUES (49, 1, '線裝', 8873.79, '2022-03-01 00:00:00', '2022-03-31 16:59:17', 1, 10);
INSERT INTO `electrics` VALUES (50, 1, '自動化', 3132.41, '2022-03-01 00:00:00', '2022-03-31 16:59:17', 1, 10);
INSERT INTO `electrics` VALUES (51, 1, '辦公區', 992.01, '2022-03-01 00:00:00', '2022-03-31 16:59:17', 1, 10);
INSERT INTO `electrics` VALUES (52, 1, '空壓機', 5121.84, '2022-03-01 00:00:00', '2022-03-31 16:59:17', 1, 10);
INSERT INTO `electrics` VALUES (53, 1, '電梯', 50.06, '2022-03-01 00:00:00', '2022-03-31 16:59:17', 1, 10);
INSERT INTO `electrics` VALUES (54, 1, '加工中心', 2302.69, '2022-03-01 00:00:00', '2022-03-31 16:59:17', 1, 10);
INSERT INTO `electrics` VALUES (55, 1, '中央空調', 1207.18, '2022-03-14 00:00:00', '2022-03-31 16:59:34', 1, 11);
INSERT INTO `electrics` VALUES (56, 1, '線裝', 8873.79, '2022-03-14 00:00:00', '2022-03-31 16:59:34', 1, 11);
INSERT INTO `electrics` VALUES (57, 1, '自動化', 3232.41, '2022-03-14 00:00:00', '2022-03-31 16:59:34', 1, 11);
INSERT INTO `electrics` VALUES (58, 1, '辦公區', 982.01, '2022-03-14 00:00:00', '2022-03-31 16:59:34', 1, 11);
INSERT INTO `electrics` VALUES (59, 1, '空壓機', 5121.84, '2022-03-14 00:00:00', '2022-03-31 16:59:34', 1, 11);
INSERT INTO `electrics` VALUES (60, 1, '電梯', 53.06, '2022-03-14 00:00:00', '2022-03-31 16:59:34', 1, 11);
INSERT INTO `electrics` VALUES (61, 1, '加工中心', 2202.69, '2022-03-14 00:00:00', '2022-03-31 16:59:34', 1, 11);
INSERT INTO `electrics` VALUES (62, 1, '中央空調', 1707.18, '2022-03-21 00:00:00', '2022-03-31 16:59:46', 1, 12);
INSERT INTO `electrics` VALUES (63, 1, '線裝', 8873.79, '2022-03-21 00:00:00', '2022-03-31 16:59:46', 1, 12);
INSERT INTO `electrics` VALUES (64, 1, '自動化', 3232.41, '2022-03-21 00:00:00', '2022-03-31 16:59:46', 1, 12);
INSERT INTO `electrics` VALUES (65, 1, '辦公區', 992.01, '2022-03-21 00:00:00', '2022-03-31 16:59:46', 1, 12);
INSERT INTO `electrics` VALUES (66, 1, '空壓機', 5021.84, '2022-03-21 00:00:00', '2022-03-31 16:59:46', 1, 12);
INSERT INTO `electrics` VALUES (67, 1, '電梯', 53.06, '2022-03-21 00:00:00', '2022-03-31 16:59:46', 1, 12);
INSERT INTO `electrics` VALUES (68, 1, '加工中心', 2102.69, '2022-03-21 00:00:00', '2022-03-31 16:59:46', 1, 12);
INSERT INTO `electrics` VALUES (69, 1, '中央空調', 1707.18, '2022-03-28 00:00:00', '2022-03-31 16:59:56', 1, 13);
INSERT INTO `electrics` VALUES (70, 1, '線裝', 8873.79, '2022-03-28 00:00:00', '2022-03-31 16:59:56', 1, 13);
INSERT INTO `electrics` VALUES (71, 1, '自動化', 3232.41, '2022-03-28 00:00:00', '2022-03-31 16:59:56', 1, 13);
INSERT INTO `electrics` VALUES (72, 1, '辦公區', 992.01, '2022-03-28 00:00:00', '2022-03-31 16:59:56', 1, 13);
INSERT INTO `electrics` VALUES (73, 1, '空壓機', 5121.84, '2022-03-28 00:00:00', '2022-03-31 16:59:56', 1, 13);
INSERT INTO `electrics` VALUES (74, 1, '電梯', 63.06, '2022-03-28 00:00:00', '2022-03-31 16:59:56', 1, 13);
INSERT INTO `electrics` VALUES (75, 1, '加工中心', 2502.69, '2022-03-28 00:00:00', '2022-03-31 16:59:56', 1, 13);

最後sql腳本如下:

select
departname,
week,
sum(energy) total
from
(    
    select * from electrics e
    where week <> 0
    and 5>(select count(1) from electrics el where el.departname=e.departname and el.energytime>e.energytime)
) t
group by departname,week
order by departname,week asc

 

對上面腳本分析如下:下面的腳本是獲取各個區域的最近五週的總用電量。where語句中的數量表示分組後要獲取的記錄條數。

 select * from electrics e
    where week <> 0
    and 5>(select count(1) from electrics el where el.departname=e.departname and el.energytime>e.energytime)

 

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