国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Sql】根據(jù)字段分組排序,取其第一條數(shù)據(jù)

這篇具有很好參考價值的文章主要介紹了【Sql】根據(jù)字段分組排序,取其第一條數(shù)據(jù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【一】問題描述

(1)問題描述
有時候我們需要對數(shù)據(jù)進行去重處理,例如查詢結(jié)果里的文件名有重復(fù),我們希望可以按照創(chuàng)建時間排序,最終結(jié)果里每個文件名只取創(chuàng)建時間最近的一個。

(2)有哪些問題
想到去重,可以想到使用distinct或者group by分組。但是這兩者有個問題,例如我們查詢結(jié)果中包含多個目標(biāo)字段【文件id,文件名,文件所屬項目,文件創(chuàng)建時間,文件類型】等等。

distinct是對組合進行去重,必須加在select中和所有目標(biāo)字段之前,也就是只有當(dāng)上面的5個字段都重復(fù)了,這條數(shù)據(jù)才算是重復(fù)。

group by也是要求select中的字段必須出現(xiàn)在group by中,同樣是上面的5個字段都重復(fù)了,這條數(shù)據(jù)才算是重復(fù)。

而我們的目標(biāo)是只根據(jù)【文件名】進行分組,在分組中根據(jù)文件創(chuàng)建時間進行排序,然后每組中只選取創(chuàng)建時間最近的那條數(shù)據(jù),且這條數(shù)據(jù)是完整的包含上面5個字段。

(3)為什么不在業(yè)務(wù)代碼里進行過濾處理?
因為還有分頁查詢的功能,所以查詢的工作就必須得在sql里實現(xiàn)(就當(dāng)學(xué)習(xí)sql了)

【二】解決方案(oracle和mysql都可用)

(1)當(dāng)前sql

SELECT
	T.ID,
	R.TASK_ID,
	T.CRT_DT_TM,
	'RST_TABLE' AS TYPE,
	T.FULL_NM AS NAME 
FROM
	period_script_x_rst_table T
	JOIN period_script_revision R ON R.ID = T.PERIOD_SCRIPT_REV_ID
	JOIN period_script_info S ON S.ID = R.PERIOD_SCRIPT_ID 
WHERE
	S.MASTER_REV_ID = T.PERIOD_SCRIPT_REV_ID 

查詢結(jié)果
sql 分組取第一條數(shù)據(jù),sql,數(shù)據(jù)庫,mysql
可以看到NAME有很多重復(fù)的,我們只想取到時間最近的那一條,同時還不能用group by進行分組

(2)加上分組語句和組內(nèi)排序

SELECT
	T.ID,
	R.TASK_ID,
	'RST_TABLE' AS TYPE,
	T.FULL_NM AS NAME,
	rank () over ( partition BY T.FULL_NM ORDER BY T.CRT_DT_TM DESC ) rankNo 
FROM
	period_script_x_rst_table T
	JOIN period_script_revision R ON R.ID = T.PERIOD_SCRIPT_REV_ID
	JOIN period_script_info S ON S.ID = R.PERIOD_SCRIPT_ID 
WHERE
	S.MASTER_REV_ID = T.PERIOD_SCRIPT_REV_ID

查詢結(jié)果
sql 分組取第一條數(shù)據(jù),sql,數(shù)據(jù)庫,mysql
可以看到結(jié)果是根據(jù)NAME進行了分組,并且進行了組內(nèi)排序,最后給每條數(shù)據(jù)加了一個組內(nèi)排序序號。

(3)加上條件過濾實現(xiàn)組內(nèi)取第一條目標(biāo)數(shù)據(jù)

SELECT
	* 
FROM
	(
	SELECT
		T.ID,
		R.TASK_ID,
		T.CRT_DT_TM,
		'RST_TABLE' AS TYPE,
		T.FULL_NM AS NAME,
		rank () over ( partition BY T.FULL_NM ORDER BY T.CRT_DT_TM DESC ) rankNo 
	FROM
		period_script_x_rst_table T
		JOIN period_script_revision R ON R.ID = T.PERIOD_SCRIPT_REV_ID
		JOIN period_script_info S ON S.ID = R.PERIOD_SCRIPT_ID 
	WHERE
		S.MASTER_REV_ID = T.PERIOD_SCRIPT_REV_ID 
	) e 
WHERE
	e.rankNo = 1 

查詢結(jié)果
sql 分組取第一條數(shù)據(jù),sql,數(shù)據(jù)庫,mysql
可以看到,根據(jù)組內(nèi)排序序號rankNo=1來過濾,就實現(xiàn)了去重的效果

【三】總結(jié)

如果想要實現(xiàn)去重,而distinct和group by都無法滿足需求,就可以考慮試試這個方案文章來源地址http://www.zghlxwxcb.cn/news/detail-570810.html

rank() over(partition by e.commandid order by e.systemid desc) rankNo (
partition by 根據(jù)什么進行分組,
order by 根據(jù)什么進行排序,
rank() over() 進行排名
rankNo 別名
)

到了這里,關(guān)于【Sql】根據(jù)字段分組排序,取其第一條數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【ES】分組后每組取第一條

    【ES】分組后每組取第一條

    表格如下: 想要獲得所有測站最新的一條數(shù)據(jù),即先對Station分組,根據(jù)time進行排序(降序),取第一條。 參考文章: 分組后進行排序取第一條,然后再過濾 - Elastic 中文社區(qū)

    2024年02月15日
    瀏覽(33)
  • Java查詢es數(shù)據(jù),根據(jù)指定id檢索(in查詢),sql權(quán)限過濾,多字段匹配檢索,數(shù)據(jù)排序

    Java集成Elasticsearch,進行索引數(shù)據(jù)查詢,并進行sql權(quán)限過濾,指定id檢索(in查詢),多字段匹配檢索,數(shù)據(jù)排序。由于權(quán)限過濾是根據(jù)sql語句判斷當(dāng)前用戶或其部門可查詢的數(shù)據(jù),所以采用以下方法: 1.通過sql過濾出當(dāng)前用戶可查詢的數(shù)據(jù)id集合idsList; 2.將當(dāng)前用戶可查詢的

    2024年02月22日
    瀏覽(21)
  • Clickhouse學(xué)習(xí)系列——一條SQL完成gourp by分組與不分組數(shù)值計算

    Clickhouse學(xué)習(xí)系列——一條SQL完成gourp by分組與不分組數(shù)值計算

    ? ? ? ?筆者在近一兩年接觸了Clickhouse數(shù)據(jù)庫,在項目中也進行了一些實踐,但一直都沒有一些技術(shù)文章的沉淀,近期打算做個系列,通過一些具體的場景將Clickhouse的用法進行沉淀和分享,供大家參考。 ? ? ? 首先我們假設(shè)一個Clickhouse數(shù)據(jù)表: 這個表格的字段含義如注釋,

    2024年02月14日
    瀏覽(25)
  • Sql group by 分組取時間最新的一條數(shù)據(jù)

    Sql group by 分組取時間最新的一條數(shù)據(jù)

    1.取時間最新的記錄 不分組有重復(fù)(多條CreateTime一樣的都是最新記錄) 2.分組后取時間最新的記錄 3.如果Id是uuid類型無法使用max(id)的解決辦法(使用開窗函數(shù))

    2024年02月11日
    瀏覽(22)
  • golang實現(xiàn)es根據(jù)某字段分組,統(tǒng)計每組某一字段的數(shù)量,過濾空值并去重

    需求: 索引:dna 需求:根據(jù)app.Id分組,統(tǒng)計每組的OwnerBid數(shù)量,過濾空值并去重 dna索引結(jié)構(gòu) es查詢語句 es查詢結(jié)果 goalng實現(xiàn) models.EsCountAgg 【面向校招】全力備戰(zhàn)2023Golang實習(xí)與校招 歡迎進群交流:1007576722

    2024年02月17日
    瀏覽(24)
  • Java Stream 處理分組后取每組最大&Stream流之list轉(zhuǎn)map、分組取每組第一條&Java 8 Collectors:reducing 示例(List分組取最值)

    Java Stream 處理分組后取每組最大&Stream流之list轉(zhuǎn)map、分組取每組第一條&Java 8 Collectors:reducing 示例(List分組取最值)

    有一個需求功能:先按照某一字段分組,再按照另外字段獲取最大的那個 先根據(jù)appId分組,然后根據(jù)versionSort取最大. JDK1.8推出的stream流能極大的簡化對集合的操作,讓代碼更美觀,老規(guī)矩,直接上代碼。 取list中對象的某個屬性作為唯一key,對象作為value形成一個map集合,能

    2024年02月16日
    瀏覽(28)
  • sql 分組討論,二級分組(非2個字段分組),使用 窗口函數(shù)和普通分組實現(xiàn)

    先按照一個字段分組,在按照 第二個字段分組。 之后,如果 這個 二級分組中的數(shù)據(jù),是 1條的。就篩選出來。 比如: 先按照 站點分組,再按照 設(shè)備分組, 即:如果站點上配置了2個設(shè)備。就篩選出來。 然后:這2個設(shè)備 都必須是屏幕 查出配置了2個設(shè)備的站點 要求 這兩個

    2024年02月13日
    瀏覽(16)
  • SQL結(jié)果-根據(jù)某個字段取最新時間去重

    SQL結(jié)果-根據(jù)某個字段取最新時間去重

    現(xiàn)在有個sql,如果“propertyId”相同,取“updateTime”時間最新的那條記錄,其他過濾掉。 結(jié)果SQL 為了通過 propertyId 去重并獲取每個 propertyId 對應(yīng)的最新時間的記錄,可以使用窗口函數(shù) ROW_NUMBER() 來對每個分組進行排序,并在外部查詢中取出 rn 列等于 1 的行,即每個分組中的第

    2024年02月07日
    瀏覽(94)
  • 【MySQL】根據(jù)多個字段查詢數(shù)據(jù)進行去重的sql編寫

    一、實現(xiàn)思路 根據(jù)四個字段進行數(shù)據(jù)去重的SQL編寫可以使用GROUP BY和HAVING子句來實現(xiàn)。 場景一: 假設(shè)有一個名為 table1 的數(shù)據(jù)表,其中包含四個字段: field1 、 field2 、 field3 和 field4 。要求根據(jù)這四個字段進行數(shù)據(jù)去重。 可以使用以下SQL語句: 場景二: 上述SQL語句會返回所

    2024年02月15日
    瀏覽(99)
  • SQL基礎(chǔ)語法 | 增刪改查、分組、排序、limit

    創(chuàng)建數(shù)據(jù)庫 查看數(shù)據(jù)庫 選擇數(shù)據(jù)庫 刪除數(shù)據(jù)庫 創(chuàng)建表格 刪除表格 創(chuàng)建schema模式 刪除schema模式 刪除一個空模式 刪除一個模式及包含的所有對象 1. 增insert into sql語法 : INSERT INTO TABLE_NAME (字段名1, column2, column3,...columnN) VALUES (value1, value2, value3,...valueN) 2. 查詢select SQL語法:

    2024年02月15日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包