sql使用加和進行合并去重并提升速率

背景

  • 有三張表ltd1 、ltd0051和、ltd0011
  • ltd1作為主表,左關聯 ltd0051和ltd0011
  • 如果ltd0051有兩條重復數據、td0011有兩條重復數據,左關聯之后就會得到4條,同時ltd0051和ltd0011這兩條數據都是正確,基于主鍵我們需要將兩個相同主鍵的數據合并成一條

ltd0051和ltd0011 中是存在重復數據的,
ltd0051重復數據的判定規則:planid和batchno,MatCode相同的判定為重復數據
ltd0011重復數據的判定規則:planid和batchno,MatCode相同的判定為重復數據

第一步:實現需求

使用了兩個子查詢,對重復數據進行加和,得到兩個新表

SELECTltd1.plan_id_out,ltd1.batchno_out,ltd1.lot_id_out,ltd1.material_code_out,ltd1.material_name_out,ltd1.equip_id_out,ltd1.pro_date_out,ltd1.shift_id_out,ltd1.weight_out,ltd1.state_out,CASE WHEN t11.MATCODE IS NOT NULL THEN t11.MATCODE ELSE t51.MATCODE END AS material_code_in,CASE WHEN t11.MATNAME IS NOT NULL THEN t11.MATNAME ELSE t51.MATNAME END AS material_name_in,CASE WHEN t11.SWeight IS NOT NULL THEN t11.SWeight ELSE t51.ActWT END AS weight_in,t11.lotid AS lot_id_in,ltin.orderno AS plan_id_in,ltin.JDAT AS pro_date_in,ltin.JSHT AS shift_id_in,ltin.JMCH AS equip_id_in
FROM(SELECTORDERNO AS plan_id_out,LOTID AS lot_id_out,JDAT AS pro_date_out,CAST(JSHT AS INT) AS shift_id_out,JMCH AS equip_id_out,ITNBR AS material_code_out,ITDSC AS material_name_out,'' AS unit_cost_out,jwt AS weight_out,'' AS cost_out,CAST(VALUE AS INT) AS batchno_out,CASE WHEN STATE IN (4, 5) THEN '空走' ELSE '非空走' END AS state_outFROMPLMES.dbo.LTD0001CROSS APPLY STRING_SPLIT(CNUMNEW, ',')WHEREDIV <> 'XL') LTD1LEFT JOIN (SELECTplanid,batchno,MATCODE,SUM(ActWT) AS ActWT,MAX(MatName) AS MatNameFROMltd0051GROUP BYplanid, batchno, MATCODE) t51 ON LTD1.plan_id_out = t51.planid AND ltd1.batchno_out = t51.batchnoLEFT JOIN (SELECTplanid,batchno,MATCODE,SUM(CAST(SWeight AS DECIMAL(20, 10))) AS SWeight,MAX(MatName) AS MatName,lotidFROMltd0011GROUP BYplanid, batchno, MATCODE, lotid) t11 ON LTD1.plan_id_out = t11.planid AND ltd1.batchno_out = t11.batchno AND t51.MATCODE = t11.MATCODELEFT JOIN ltd0001 ltin ON t11.LOTID = ltin.lotid
WHERELTD1.pro_date_out = '2024-05-20'AND LTD1.shift_id_out = 1

優化查詢效率

  • 查詢出來了,但是很慢
  1. 索引優化:確保在 ltd0051 和 ltd0011 表的 planid、batchno 和 MATCODE 列上有適當的索引。但是這不是我們自己的表,無法實現。
  1. 減少數據量:在子查詢中添加過濾條件,減少需要處理的數據量。但是,我們是根據主表ltd1作為篩選條件的,無法對子表進行條件查詢
  1. CTE (Common Table Expressions):使用 WITH 語句創建兩個 CTE (t51_agg 和 t11_agg) 來存儲聚合后的數據。
-- 取 產出數據
WITH LTD1 AS (SELECTORDERNO AS plan_id_out,LOTID AS lot_id_out,JDAT AS pro_date_out,CAST ( JSHT AS INT ) AS shift_id_out,JMCH AS equip_id_out,ITNBR AS material_code_out,ITDSC AS material_name_out,'' AS unit_cost_out,jwt AS weight_out,'' AS cost_out,CAST ( VALUE AS INT ) AS batchno_out,CASEWHEN STATE IN ( 4, 5 ) THEN'空走' ELSE '非空走' END AS state_out FROMPLMES.dbo.LTD0001 CROSS APPLY STRING_SPLIT ( CNUMNEW, ',' ) WHEREDIV <> 'XL' AND jdat = '2024-05-20' AND jsht = 1 ),
-- 關聯得到 稱重數據t51_agg AS (SELECTplanid,batchno,MATCODE,SUM ( ActWT ) AS ActWT,MAX ( MatName ) AS MatName FROMltd0051 GROUP BYplanid,batchno,MATCODE ),
-- 關聯得到 追溯數據t11_agg AS (SELECTplanid,batchno,MATCODE,SUM ( CAST ( SWeight AS DECIMAL ( 20, 10 ) ) ) AS SWeight,MAX ( MatName ) AS MatName,lotid FROMltd0011 GROUP BYplanid,batchno,MATCODE,lotid ) SELECTltd1.plan_id_out,ltd1.batchno_out,ltd1.lot_id_out,ltd1.material_code_out,ltd1.material_name_out,ltd1.equip_id_out,ltd1.pro_date_out,ltd1.shift_id_out,ltd1.weight_out,ltd1.state_out,
CASEWHEN t11.MATCODE IS NOT NULL THENt11.MATCODE ELSE t51.MATCODE END AS material_code_in,
CASEWHEN t11.MATNAME IS NOT NULL THENt11.MATNAME ELSE t51.MATNAME END AS material_name_in,
CASEWHEN t11.SWeight IS NOT NULL THENt11.SWeight ELSE t51.ActWT END AS weight_in,t11.lotid AS lot_id_in,ltin.orderno AS plan_id_in,ltin.JDAT AS pro_date_in,ltin.JSHT AS shift_id_in,ltin.JMCH AS equip_id_in 
FROMLTD1LEFT JOIN t51_agg t51 ON LTD1.plan_id_out = t51.planid AND ltd1.batchno_out = t51.batchnoLEFT JOIN t11_agg t11 ON LTD1.plan_id_out = t11.planid AND ltd1.batchno_out = t11.batchno AND t51.MATCODE = t11.MATCODELEFT JOIN ltd0001 ltin ON t11.LOTID = ltin.lotid;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13665.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13665.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13665.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【全開源】AJAX家政上門服務系統小程序自營+多商家(高級授權)+獨立端

基于FastAdmin和原生微信小程序開發的一款同城預約、上門服務、到店核銷家政系統&#xff0c;用戶端、服務端(高級授權)、門店端(高級授權)各端相互依賴又相互獨立&#xff0c;支持選擇項目、選擇服務人員、選擇門店多種下單方式&#xff0c;支持上門服務和到店核銷兩種服務方式…

深入理解數倉開發(一)數據技術篇之日志采集

前言 今天開始重新回顧電商數倉項目&#xff0c;結合《阿里巴巴大數據之路》和尚硅谷的《劍指大數據——企業級電商數據倉庫項目實戰 精華版》來進行第二次深入理解學習。之前第一次學習數倉&#xff0c;雖然盡量放慢速度力求深入理解&#xff0c;但是不可能一遍掌握&#xff0…

我在去哪兒薅到了5塊錢火車票代金券,速薅

哈哈&#xff0c;親愛的薅羊毛小伙伴們&#xff01; 剛剛在去哪兒大佬那兒發現了一個超級薅羊毛福利&#xff01;我只花了短短兩分鐘&#xff0c;就搞到了一張5塊錢火車票代金券&#xff0c;簡直是天上掉餡餅的節奏啊&#xff01; 話不多說&#xff0c;薅羊毛的姿勢給你們擺好…

代碼隨想錄算法訓練營第十六天(py)| 二叉樹 | 104.二叉樹的最大深度、111.二叉樹的最小深度、222.完全二叉樹的節點個數

104.二叉樹的最大深度 給定一個二叉樹 root &#xff0c;返回其最大深度。 二叉樹的 最大深度 是指從根節點到最遠葉子節點的最長路徑上的節點數。 思路1 迭代法 層序遍歷 層序遍歷的思路很簡單&#xff0c;其結果本來就是按層數記錄的&#xff0c;只需返回結果的長度皆可。…

【C語言回顧】聯合和枚舉

前言1. 聯合體1.1 聯合體的聲明1.2 聯合體的特點1.3 聯合體的使用 2. 枚舉2.1 枚舉的聲明2.2 枚舉的特點2.3 枚舉的使用 結語 #include<GUIQU.h> int main { 上期回顧: 【C語言回顧】結構體 個人主頁&#xff1a;C_GUIQU 專欄&#xff1a;【C語言學習】 return 一鍵三連;…

解決法律條文的錄入前判斷發條沖突的需求;怎么選擇NLPModel?怎么使用模型?

要在NLPModel類中實現法律條文的沖突檢測功能&#xff0c;可以使用BERT模型來計算句子相似度。以下是詳細的步驟&#xff0c;包括如何選擇模型、訓練模型以及使用模型。 選擇NLP模型 根據你的需求&#xff0c;BERT&#xff08;Bidirectional Encoder Representations from Tra…

Linux多線程系列三: 生產者消費者模型,信號量使用,基于阻塞隊列和環形隊列的這兩種生產者消費者代碼的實現

Linux多線程系列三: 生產者消費者模型,信號量,基于阻塞隊列和環形隊列的這兩種生產者消費者代碼的實現 一.生產者消費者模型的理論1.現實生活中的生產者消費者模型2.多線程當中的生產者消費者模型3.理論 二.基于阻塞隊列的生產者消費者模型的基礎代碼1.阻塞隊列的介紹2.大致框架…

別說廢話!說話說到點上,項目高效溝通的底層邏輯揭秘

假設你下周要在領導和同事面前匯報項目進度&#xff0c;你會怎么做&#xff1f;很多人可能會去網上搜一個項目介紹模板&#xff0c;然后按照模板來填充內容。最后&#xff0c;匯報幻燈片做了 80 頁&#xff0c;自己覺得非常充實&#xff0c;但是卻被領導痛批了一頓。 這樣的境…

樹的非遞歸遍歷(層序)

層序是采用隊列的方式來遍歷的 就比如說上面這顆樹 他層序的就是&#xff1a;1 24 356 void LevelOrder(BTNode* root) {Que q;QueueInit(&q);if (root){QueuePush(&q, root);}while (!QueueEmpty(&q)){BTNode* front QueueFront(&q);QueuePop(&q);print…

簡析網絡風險量化的價值與應用實踐,如何構建網絡風險預防架構

網絡風險量化能夠讓公司董事會和高管層看清當前的網絡安全風險格局&#xff1b;它還將使安全團隊能夠在業務需求的背景下做出網絡安全決策&#xff0c;幫助組織確定哪些風險對業務構成最大的威脅&#xff0c;以及預期的經濟損失將是什么。 隨著網絡攻擊手段的日益多樣化和復雜…

多模態大模型新進展——GPT-4o、Project Astra關鍵技術丨青源Workshop第27期

青源Workshop丨No.27 多模態大模型新進展—GPT-4o、Project Astra關鍵技術主題閉門研討會 剛剛過去的兩天&#xff0c;OpenAI、Google紛紛發布了多模態大模型的最新成果&#xff0c;GPT-4o、Project Astra先后亮相。 本周五&#xff08;北京時間5月17日&#xff09;18點&#x…

O2OA(翱途)開發平臺數據統計如何配置?

O2OA提供的數據管理中心&#xff0c;可以讓用戶通過配置的形式完成對數據的匯總&#xff0c;統計和數據分組展現&#xff0c;查詢和搜索數據形成列表數據展現。也支持用戶配置獨立的數據表來適應特殊的業務的數據存儲需求。本文主要介紹如何在O2OA中開發和配置統計。 一、先決…

eNSP學習——OSPF多區域配置

目錄 主要命令 前期準備 實驗內容 分析 實驗目的 實驗步驟 實驗拓撲 實驗編址 實驗步驟 1、基本配置 配置與測試結果(部分) 2、配置骨干區域路由器 配置與測試結果(示例) 3、配置非骨干區域路由器 查看OSPF鄰居狀態 查看路由表中的OSPF路由條目 查看OSPF鏈…

【30天精通Prometheus:一站式監控實戰指南】第6天:mysqld_exporter從入門到實戰:安裝、配置詳解與生產環境搭建指南,超詳細

親愛的讀者們&#x1f44b; ??歡迎加入【30天精通Prometheus】專欄&#xff01;&#x1f4da; 在這里&#xff0c;我們將探索Prometheus的強大功能&#xff0c;并將其應用于實際監控中。這個專欄都將為你提供寶貴的實戰經驗。&#x1f680; ??Prometheus是云原生和DevOps的…

python設計模式--觀察者模式

觀察者模式是一種行為設計模式&#xff0c;它定義了一種一對多的依賴關系&#xff0c;讓多個觀察者對象同時監聽某一個主題對象&#xff0c;當主題對象狀態發生變化時&#xff0c;會通知所有觀察者對象&#xff0c;使它們能夠自動更新。 在 Python 中&#xff0c;觀察者模式通…

PersonalLLM——探索LLM是否能根據五大人格特質重新塑造一個新的角色?

1.概述 近年來&#xff0c;大型語言模型&#xff08;LLMs&#xff09;&#xff0c;例如ChatGPT&#xff0c;致力于構建能夠輔助人類的個性化人工智能代理&#xff0c;這些代理以進行類似人類的對話為重點。在學術領域&#xff0c;尤其是社會科學中&#xff0c;一些研究報告已經…

正心歸一、綻放真我 好普集團正一生命文化藝術大賽(中老年賽區)正式啟動

為進一步弘揚社會主義核心價值觀&#xff0c;弘揚生命文化&#xff0c;提升公眾對生命價值的認識與尊重&#xff0c;同時展現中老年藝術家的創作才華&#xff0c;激發廣大中老年朋友的藝術熱情和創造力。好普集團主辦&#xff0c;幸福金齡會與正一生命科學研究&#xff08;廣州…

adb獲取點擊坐標并模擬點擊事件(模擬滑動)

屏幕分辨率&#xff1a; $ adb shell wm size Physical size: 1080x2340 獲取設備的最大X和Y&#xff1a; 為8639 18719 $ adb shell getevent -p | grep -e "0035" -e "0036" 0035 : value 0, min 0, max 8639, fuzz 0, flat 0, resolution 0 0036 : v…

AWS安全性身份和合規性之Artifact

AWS Artifact是對您很重要的與合規性相關的信息的首選中央資源。AWS Artifact是一項服務&#xff0c;提供了一系列用于安全合規的文檔、報告和資源&#xff0c;以幫助用戶滿足其合規性和監管要求。它允許按需訪問來自AWS和在AWS Marketplace上銷售產品的ISV的安全性和合規性報告…

網絡模型-VLAN聚合

VLAN聚合 VLAN聚合(VLAN Aggregation,也稱SuperVLAN)指在一個物理網絡內&#xff0c;用多個VLAN(稱為Sub-VLAN)隔離廣播域并將這些Sub-VLAN聚合成一個邏輯的VLAN(稱為SuperVLAN)&#xff0c;這些Sub-VLAN使用同一個IP子網和缺省網關&#xff0c;&#xff0c;進而達到節約IP地址…