sql server - SQL: create new table with distinct value and max/min values for other columns w/in an existing table -
उदाहरण: मान लें कि मूल तालिका में निम्न मान हैं
AcctNBR StatusDate ---- -------------- 123 01/01/2012 123 01/01/2013 123 12/11/2011 987 01/01/2009 एसक्यूएल एक नई तालिका बनायेगा जिसमें
एक्टएनबीआर आरम्भीस्ट स्टेटस डेट नवीनतम स्टेटस डेट ------------------------------ ------------- 123 12/11/2011 01/01/2013 987 01/01/2009 01/01/2009 मैं देख रहा हूँ ऐसा करने के लिए एक प्रभावी तरीके से मेरे पास एक ऐसा तरीका है जो काम करता है, लेकिन यह एक अस्वीकार्य रूप से लंबा समय लेता है। क्या किसी के पास कोई अनुकूलन युक्तियां हैं किसी भी मदद की काफी सराहना की जाएगी।
ड्रॉप तालिका पर सेट नोड लूप टेम्पल ड्रॉप तालिका रिपोर्ट टेंपल बनाओ टेबल लूप टेम्पम (आईडी आईआईटी आईएनटीटीआई (1, 1) नल, एक्टएनएनबीआर वर्चार (50),) टेबल बनाओ रिपोर्ट टेम्प (एसीटीएनबीआर varchar (50), सबसे पुराना स्टेटस तिथि, नवीनतम स्टेटस डेट) लूपटम्प्शन में शामिल करें ऑटोस्टैटस इतिहास से एक्टिबिल का चयन करें @ कतार के रूप में INT SET @COUNTER = 1 DECLARE @MAX AS INT SET @ MAX = (लूपटेम्प से अधिकतम MAX) WHILE @ कतार & lt; @ MAX BEGIN DECLARE @ACCOUNT_NUMBER के रूप में Varchar (50) SET @ACCOUNT_NUMBER = (SELECT acctNBR से लूपटैप जहां आईडी आईडी = @ कतार) दिनांक के अनुसार @EARLIESTSTATUSDATE दिनांक सेट @EARLIESTSTATUSDATE = (SELECT MIN (NewStatusDate) AutoStatusHistory WHERE acctNBR = @ACCOUNT_NUMBER) DECLARE @LATESTSTATUSDATE के रूप में दिनांक सेट @LATESTSTUSUSDATE = (चयन करें MAX (NewStatusDate) से AutoStatusHistory WHERE AcctNBR = @ACCOUNT_NUMBER) रिपोर्ट में सम्मिलित करें नमूना मूल्य (@ACCOUNT_NUMBER, @EARLIESTSTATUSDATE, @LATESTSTATUSDATE) अगर (@ कतार% 1000) = 0 प्रिंट प्रिंट @ कतार अंत - यदि SET @COUNTER = @COUNTER + 1 अंत - जहां ड्रॉप टेबल लूपटाम
<पी > जब तक मुझे कुछ याद नहीं आ रहा है, यह बहुत सरल होना चाहिए: का चयन करें acctNbr, MIN (statusDate) के रूप में सबसे पुराना स्टेटस डेट, मैक्स (स्थितिदिनांक) के रूप में नवीनतम स्टेटस दिनांक MyTable GROUP द्वारा AcctNBR < / प्री>
Comments
Post a Comment