最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql分組排序如何取第一條數(shù)據(jù)

 更新時(shí)間:2023年07月20日 17:01:39   作者:GoodStudyAndDayDayUp  
這篇文章主要介紹了mysql分組排序如何取第一條數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mysql分組排序取第一條數(shù)據(jù)

需求:

mysql 根據(jù)某一個(gè)字段分組,然后組內(nèi)排序,最后每組取排序后的第一條數(shù)據(jù)

1. 先使用(分組字段+排序字段)排序

相當(dāng)于實(shí)現(xiàn)了分組和排序,只是沒有根據(jù)分組字段聚合,此時(shí)每個(gè)分組的第一條數(shù)據(jù)就是我們需要的目標(biāo)數(shù)據(jù)。

2. 再按分組字段分組,取第一條即可

實(shí)例如下:

with?
t_picture as(
?SELECT npi_product_id,is_default_one,update_time, uri FROM datahub_product_attachment where type=1 ORDER BY npi_product_id,is_default_one DESC,update_time DESC
)
SELECT npi_product_id, (ARRAY_AGG(uri))[1] as uri FROM t_picture ?group by npi_product_id

必須在分組前排序,分組后排序是對(duì)分組字段和聚合字段排序。

mysql分組求組內(nèi)的最大最小值

可能有一段時(shí)間沒寫代碼,今天在項(xiàng)目里發(fā)現(xiàn)了一個(gè)bug,記錄下~

(1)數(shù)據(jù)準(zhǔn)備

《節(jié)假日表》
CREATE TABLE `app_calendar_holiday` (
  `holiday_name` varchar(50) NOT NULL COMMENT '假期名',
  `holiday_date` varchar(10) NOT NULL COMMENT '假期的日期(yyyy-MM-dd)',
  `rel_date` varchar(10) NOT NULL COMMENT '節(jié)假日相關(guān)聯(lián)的日子',
  `rel_date_status` int(1) NOT NULL COMMENT '節(jié)假日相關(guān)聯(lián)的日是否上班(	1:放假,2:上班)',
  `is_delete` int(1) NOT NULL DEFAULT '0' COMMENT '刪除flg',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
  UNIQUE KEY `rel_date` (`rel_date`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='假期表';
-- ----------------------------
-- Records of app_calendar_holiday
-- ----------------------------
INSERT INTO `app_calendar_holiday` VALUES ('元旦', '2019-01-01', '2018-12-29', '2', '0', '2019-09-01 23:08:09', '2019-09-02 10:48:11');
INSERT INTO `app_calendar_holiday` VALUES ('元旦', '2019-01-01', '2018-12-30', '1', '0', '2019-09-01 23:08:10', '2019-09-02 10:48:16');
INSERT INTO `app_calendar_holiday` VALUES ('元旦', '2019-01-01', '2018-12-31', '1', '0', '2019-09-01 23:08:09', '2019-09-02 10:48:17');
INSERT INTO `app_calendar_holiday` VALUES ('元旦', '2019-01-01', '2019-01-01', '1', '0', '2019-09-01 23:08:10', '2019-09-02 10:48:18');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-02', '2', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:22');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-03', '2', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:23');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-04', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:24');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-05', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:25');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-06', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:25');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-07', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:26');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-08', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:26');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-09', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:27');
INSERT INTO `app_calendar_holiday` VALUES ('春節(jié)', '2019-02-05', '2019-02-10', '1', '0', '2019-09-01 23:08:11', '2019-09-02 10:48:27');
INSERT INTO `app_calendar_holiday` VALUES ('清明節(jié)', '2019-04-05', '2019-04-05', '1', '0', '2019-09-01 23:08:12', '2019-09-02 10:59:26');
INSERT INTO `app_calendar_holiday` VALUES ('清明節(jié)', '2019-04-05', '2019-04-06', '1', '0', '2019-09-01 23:08:12', '2019-09-02 10:59:28');
INSERT INTO `app_calendar_holiday` VALUES ('清明節(jié)', '2019-04-05', '2019-04-07', '1', '0', '2019-09-01 23:08:13', '2019-09-02 10:59:30');
INSERT INTO `app_calendar_holiday` VALUES ('勞動(dòng)節(jié)', '2019-05-01', '2019-04-28', '2', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:31');
INSERT INTO `app_calendar_holiday` VALUES ('勞動(dòng)節(jié)', '2019-05-01', '2019-05-01', '1', '0', '2019-09-01 23:08:13', '2019-09-02 10:48:45');
INSERT INTO `app_calendar_holiday` VALUES ('勞動(dòng)節(jié)', '2019-05-01', '2019-05-02', '1', '0', '2019-09-01 23:08:13', '2019-09-02 10:48:46');
INSERT INTO `app_calendar_holiday` VALUES ('勞動(dòng)節(jié)', '2019-05-01', '2019-05-03', '1', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:47');
INSERT INTO `app_calendar_holiday` VALUES ('勞動(dòng)節(jié)', '2019-05-01', '2019-05-04', '1', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:47');
INSERT INTO `app_calendar_holiday` VALUES ('勞動(dòng)節(jié)', '2019-05-01', '2019-05-05', '2', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:48');
INSERT INTO `app_calendar_holiday` VALUES ('端午節(jié)', '2019-06-07', '2019-06-07', '1', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:53');
INSERT INTO `app_calendar_holiday` VALUES ('端午節(jié)', '2019-06-07', '2019-06-08', '1', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:54');
INSERT INTO `app_calendar_holiday` VALUES ('端午節(jié)', '2019-06-07', '2019-06-09', '1', '0', '2019-09-01 23:08:14', '2019-09-02 10:48:55');
INSERT INTO `app_calendar_holiday` VALUES ('中秋節(jié)', '2019-09-13', '2019-09-13', '1', '0', '2019-09-01 23:08:16', '2019-09-02 10:48:59');
INSERT INTO `app_calendar_holiday` VALUES ('中秋節(jié)', '2019-09-13', '2019-09-14', '1', '0', '2019-09-01 23:08:16', '2019-09-02 10:49:00');
INSERT INTO `app_calendar_holiday` VALUES ('中秋節(jié)', '2019-09-13', '2019-09-15', '1', '0', '2019-09-01 23:08:16', '2019-09-02 10:49:01');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-09-29', '2', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:04');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-01', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:05');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-02', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:06');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-03', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:06');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-04', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:06');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-05', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:07');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-06', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:08');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-07', '1', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:10');
INSERT INTO `app_calendar_holiday` VALUES ('國慶節(jié)', '2019-10-01', '2019-10-12', '2', '0', '2019-09-01 23:08:17', '2019-09-02 10:49:11');

(2)需求明確

查詢條件:某年某月 yyyy-MM

查詢結(jié)果:求出在該月里 的節(jié)假日

例子:條件為2019-09,返回中秋節(jié)的2019-09-13 ~ 2019-09-15 ,國慶節(jié)的放假日2019-10-1~2019-10-7 。

并輸出對(duì)應(yīng)的節(jié)假日日期、節(jié)假日名。

(3)錯(cuò)誤log

Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'panshi.t1.holiday_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

提示的 panshi.t1.holiday_name 無法取出。

(4)錯(cuò)誤sql

SELECT
		t1.holiday_date AS holidayDate,
		t1.holiday_name AS holidayName,
		MIN(t1.rel_date) AS minRelDate,
		MAX(t1.rel_date) AS maxRelDate
	FROM
		app_calendar_holiday t1
	INNER JOIN (
		SELECT DISTINCT
			holiday_date
		FROM
			`app_calendar_holiday`
		WHERE
			LEFT (rel_date, 7) = '2019-09'
	) t2 ON t1.holiday_date = t2.holiday_date
	WHERE
		t1.rel_date_status = 1
	GROUP BY
		t1.holiday_date;

(5)糾正后的SQL

糾正:select 的字段要是group by 所允許的?。?!追加分組的字段 t1.holiday_date

方法一:分組 + 每組里使用聚合函數(shù)

SELECT
		t1.holiday_date AS holidayDate,
		t1.holiday_name AS holidayName,
		MIN(t1.rel_date) AS minRelDate,
		MAX(t1.rel_date) AS maxRelDate
	FROM
		app_calendar_holiday t1
	INNER JOIN (
		SELECT DISTINCT
			holiday_date
		FROM
			`app_calendar_holiday`
		WHERE
			LEFT (rel_date, 7) = '2019-09'
	) t2 ON t1.holiday_date = t2.holiday_date
	WHERE
		t1.rel_date_status = 1
	GROUP BY
		t1.holiday_date,
		t1.holiday_name;

方法二:分組 + 每組里日期排序,再取第一個(gè)

SELECT
		t1.holiday_date AS holidayDate,
		t1.holiday_name AS holidayName,
		SUBSTRING_INDEX(
			GROUP_CONCAT(
				t1.rel_date
				ORDER BY
					t1.rel_date ASC
			),
			',',
			1
		) AS minRelDate,
		SUBSTRING_INDEX(
			GROUP_CONCAT(
				t1.rel_date
				ORDER BY
					t1.rel_date DESC
			),
			',',
			1
		) AS maxRelDate
	FROM
		app_calendar_holiday t1
	INNER JOIN (
		SELECT DISTINCT
			holiday_date
		FROM
			`app_calendar_holiday`
		WHERE
			LEFT (rel_date, 7) = '2019-09'
	) t2 ON t1.holiday_date = t2.holiday_date
	WHERE
		t1.rel_date_status = 1
	GROUP BY
		t1.holiday_date,
		t1.holiday_name;

結(jié)果:都是

在這里插入圖片描述

(6)拓展和總結(jié)

兩者方法都需要注意,如果SELECT ( 某些字段) FROM xxxx 。。。,SELECT 后的字段必須是group by 后面的,或者 使用聚合函數(shù)。

我出錯(cuò)就在于,之前的sql 里 GROPY BY 只是寫了 節(jié)假日期,但又需要取出節(jié)假日名。

方法一:

注意,再mysql 里用到group_concat的時(shí)候,拼接后的字符串 是有長度限制的。默認(rèn)是1024,可以通過修改mysql配置文件里的【group_concat_max_len】字段

其實(shí) 這種情況使用 group_concat + order by 的組合 ,有點(diǎn)多余的,因?yàn)橐呀?jīng)有聚合函數(shù)的出現(xiàn)。

不過想想,如果分組后 是組內(nèi) 需要按照某些字段排序的,返回 字符串類型的,可以用這個(gè)方法

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL如何實(shí)現(xiàn)事務(wù)的ACID

    MySQL如何實(shí)現(xiàn)事務(wù)的ACID

    這篇文章主要介紹了MySQL如何實(shí)現(xiàn)事務(wù)的四大特性,幫助大家更好的理解和學(xué)習(xí)MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-09-09
  • mysql允許外網(wǎng)訪問以及修改mysql賬號(hào)密碼實(shí)操方法

    mysql允許外網(wǎng)訪問以及修改mysql賬號(hào)密碼實(shí)操方法

    這篇文章主要介紹了mysql允許外網(wǎng)訪問以及修改mysql賬號(hào)密碼實(shí)操方法,有需要的朋友們可以參考學(xué)習(xí)下。
    2019-08-08
  • 連接mysql的常用工具分享

    連接mysql的常用工具分享

    這篇文章主要介紹了連接mysql的常用工具,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 修改Mysql索引長度限制解決767?byte限制問題

    修改Mysql索引長度限制解決767?byte限制問題

    這篇文章主要介紹了修改Mysql索引長度限制解決767?byte限制問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • MySQL提高分頁效率

    MySQL提高分頁效率

    本文分享的這段代碼是大數(shù)據(jù)量時(shí)提高分頁的效率的測(cè)試代碼,感興趣的小伙伴可以參考一下
    2015-10-10
  • 詳解MySQL幻讀及如何消除

    詳解MySQL幻讀及如何消除

    這篇文章主要介紹了詳解MySQL 幻讀及解決方法,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-03-03
  • MySQL分庫分表后主鍵ID生成的八種方案

    MySQL分庫分表后主鍵ID生成的八種方案

    當(dāng)你的MySQL數(shù)據(jù)庫因數(shù)據(jù)量或并發(fā)壓力進(jìn)行分庫分表后,主鍵ID重復(fù)會(huì)成為系統(tǒng)崩潰的導(dǎo)火索,本文將從底層原理出發(fā),結(jié)合真實(shí)業(yè)務(wù)代碼,深度解析8種主流主鍵ID生成方案,助你構(gòu)建穩(wěn)定可靠的分庫分表系統(tǒng),需要的朋友可以參考下
    2025-08-08
  • MySQL 錯(cuò)誤處理例子[譯]

    MySQL 錯(cuò)誤處理例子[譯]

    MySQL 錯(cuò)誤處理例子,國外人寫的,大家可以參考下。
    2009-10-10
  • Mysql 本地計(jì)算機(jī)無法啟動(dòng) mysql 服務(wù) 錯(cuò)誤 1067:進(jìn)程意外終止。

    Mysql 本地計(jì)算機(jī)無法啟動(dòng) mysql 服務(wù) 錯(cuò)誤 1067:進(jìn)程意外終止。

    初學(xué)php接觸mysql,遇到一些問題,卸載重裝后,無法啟動(dòng)mysql服務(wù),網(wǎng)絡(luò)上有很多種說法,我這里將我解決這個(gè)問題的辦法提出
    2009-12-12
  • MySQL修改密碼的四種方式詳解

    MySQL修改密碼的四種方式詳解

    文章介紹了4種修改MySQL密碼的方法,包括使用setpassword命令、mysqladmin命令、修改user表以及忘記密碼時(shí)的處理步驟,感興趣的朋友一起看看吧
    2025-03-03

最新評(píng)論

区。| 尤溪县| 理塘县| 扎囊县| 盱眙县| 昭平县| 辽宁省| 鄂托克前旗| 达拉特旗| 陆丰市| 台中县| 南木林县| 东乌珠穆沁旗| 宜城市| 钟祥市| 石城县| 仙桃市| 镇远县| 增城市| 新安县| 岳阳县| 怀化市| 紫金县| 朝阳市| 白朗县| 喀什市| 商水县| 郸城县| 离岛区| 扶沟县| 舒城县| 万宁市| 牡丹江市| 昌江| 长岭县| 从化市| 罗定市| 江源县| 松潘县| 玛纳斯县| 攀枝花市|