दिलचस्प पोस्ट
जावा प्रतिबिंब: मैं कैसे एक जावा वर्ग के सभी भर्ती तरीकों को प्राप्त कर सकते हैं और उन्हें आह्वान कर सकते हैं दूसरी प्रक्रिया की विंडो स्थिति प्राप्त करें मैं एएसपी.नेट डेवलपमेंट सर्वर के बजाय डीआईबगर को आईआईएस से कैसे जोड़ूं? फ्रेमवर्क मॉड्यूल के अंदर गैर मॉड्यूलर हैडर शामिल करें पायथन – वाकए पाठ में वाक्य के लिए RegEx (वाक्य-टोकनिंग) XPath अभिव्यक्ति का उपयोग करके सभी पत्ते नोडों को कैसे चुनना है? क्या करता है -> पायथन फ़ंक्शन परिभाषाओं में क्या मतलब है? सी # में 2 आयामी सूची संभव है? रजिस्ट्री कुंजी का पथ C ++ में HKEY हैंडल से निर्धारित करें उत्पन्न। NET क्रैश स्वचालित रूप से डंप Microsoft Visual Studio के लिए अनुशंसित ऐड-ऑन / प्लगइन्स सिम्युलेटर में स्विफ्ट (आईओएस 8) में एमएफमेल कॉम्पोज़ वीक कंट्रोलर के साथ असली गलतफहमी है पीएचपी फ़ंक्शंस में निर्मित फिर से परिभाषित करें एचटीएमएल रेंडरर के साथ जेएसपीडीएफ बहु पृष्ठ पीडीएफ यूट्यूब पर पेज नेविगेशन का पता लगाने और पेज को प्रस्तुत करने से पहले एचटीएमएल को कैसे संशोधित किया जाए?

उस पंक्ति को प्राप्त करें जिसमें स्तंभ के लिए अधिकतम मान है

तालिका:

UserId, Value, Date. 

मैं प्रत्येक UserId के लिए UserId, अधिकतम मूल्य (दिनांक) प्राप्त करना चाहता हूं I यही है, प्रत्येक UserId का मान जिसकी नवीनतम तिथि है। एसक्यूएल में बस ऐसा करने का कोई तरीका है? (अधिमानतः ओरेकल)

अद्यतन: किसी भी अस्पष्टता के लिए क्षमा चाहते हैं: मुझे सभी यूज़रआईडीज प्राप्त करने की आवश्यकता है I लेकिन प्रत्येक UserId के लिए, उस पंक्ति में उस उपयोगकर्ता की नवीनतम तिथि होनी चाहिए।

Solutions Collecting From Web of "उस पंक्ति को प्राप्त करें जिसमें स्तंभ के लिए अधिकतम मान है"

यह उन सभी पंक्तियों को पुनः प्राप्त करेगा जिनके लिए my_date कॉलम मूल्य उस userid के लिए my_date के अधिकतम मूल्य के बराबर है। यह उपयोगकर्ता के लिए कई पंक्तियां प्राप्त कर सकता है जहां अधिकतम दिनांक एकाधिक पंक्तियों पर है

 select userid, my_date, ... from ( select userid, my_Date, ... max(my_date) over (partition by userid) max_my_date from users ) where my_date = max_my_date 

"विश्लेषणात्मक कार्य रॉक"

संपादित करें: पहली टिप्पणी के संबंध में …

"विश्लेषणात्मक प्रश्नों और आत्म-सम्मिलन का प्रयोग करके विश्लेषणात्मक प्रश्नों का उद्देश्य"

इस कोड में कोई स्वयं-शामिल नहीं है। इसके बजाय इनलाइन दृश्य के परिणाम पर रखा गया एक विधेय है जिसमें विश्लेषणात्मक कार्य होता है- एक बहुत ही अलग बात है, और पूरी तरह से मानक अभ्यास।

"ओरेकल में डिफॉल्ट खिड़की विभाजन की पहली पंक्ति से वर्तमान में एक है"

विंडोिंग क्लॉज केवल क्लॉज द्वारा ऑर्डर की उपस्थिति में लागू होता है। खंड द्वारा कोई आदेश नहीं के साथ, कोई विंडोिंग खंड डिफ़ॉल्ट रूप से लागू नहीं होता है और कोई भी स्पष्ट रूप से निर्दिष्ट नहीं किया जा सकता है।

कोड काम करता है

मुझे लगता है कि कई लोग इसे करने के लिए subqueries या विक्रेता-विशिष्ट विशेषताओं का उपयोग करते हैं, लेकिन मैं अक्सर इस तरह की क्वेरी subqueries के बिना निम्नलिखित तरीके से करते हैं। यह सादे, मानक एसक्यूएल का उपयोग करता है इसलिए इसे RDBMS के किसी भी ब्रांड में काम करना चाहिए।

 SELECT t1.* FROM mytable t1 LEFT OUTER JOIN mytable t2 ON (t1.UserId = t2.UserId AND t1."Date" < t2."Date") WHERE t2.UserId IS NULL; 

दूसरे शब्दों में: पंक्ति को टी 1 से प्राप्त करें जहां समान उपयोगकर्ता आईडी और एक बड़ी तिथि के साथ कोई दूसरी पंक्ति मौजूद नहीं है

(मैं पहचानकर्ता "दिनांक" को सीमांकक में डाल दिया क्योंकि यह एक SQL राखी शब्द है।)

यदि t1."Date" = t2."Date" , दोहरीकरण दिखाई देता है। आमतौर पर तालिकाओं में auto_inc(seq) कुंजी है, जैसे id । दोहरीकरण से बचने के लिए इसका इस्तेमाल निम्न प्रकार से किया जा सकता है:

 SELECT t1.* FROM mytable t1 LEFT OUTER JOIN mytable t2 ON t1.UserId = t2.UserId AND ((t1."Date" < t2."Date") OR (t1."Date" = t2."Date" AND t1.id < t2.id)) WHERE t2.UserId IS NULL; 

@ फरहान से टिप्पणी करें:

यहां अधिक विस्तृत विवरण दिया गया है:

टी 2 के साथ टी 1 में शामिल होने के लिए एक बाहरी शामिल प्रयास डिफ़ॉल्ट रूप से, टी 1 के सभी परिणाम लौटा दिए जाते हैं, और यदि टी 2 में एक मैच होता है, तो यह भी वापस आ जाता है यदि टी 1 में दी गई पंक्ति के लिए टी 2 में कोई मेल नहीं है, तो क्वेरी अभी भी टी 1 की पंक्ति देता है, और सभी टी 2 के कॉलम के लिए प्लेसहोल्डर के रूप में उपयोग करता है। यह सामान्य है कि सामान्य तौर पर बाहरी कार्य कैसे कार्य करता है

इस प्रश्न की चाल में शामिल होने की मेलिंग स्थिति को डिज़ाइन करना है, जैसे कि टी 2 को एक ही प्रयोक्ता आईडी से मेल खाना चाहिए, और अधिक से अधिक तारीख। यह विचार किया जा रहा है कि यदि टी 2 में एक पंक्ति मौजूद है जो कि अधिक से अधिक दिनांक है, तो उस टीआई की तुलना में तुलना की गई है, उस उपयोगकर्ता के लिए सबसे बड़ी तारीख नहीं हो सकती। लेकिन अगर कोई मेल नहीं खाता है- यानी यदि टी 1 में पंक्ति से अधिक से अधिक दिनांक के साथ कोई पंक्ति मौजूद नहीं है – हम जानते हैं कि टी 1 में पंक्ति दी गई यूजरआड के लिए सबसे बड़ी तारीख के साथ पंक्ति थी।

उन मामलों में (जब कोई मैच नहीं होता है), टी 2 के कॉलम शून्य होंगे – यहां तक ​​कि कॉलम में शामिल हालत में निर्दिष्ट। इसलिए हम WHERE t2.UserId IS NULL उपयोग करते हैं। WHERE t2.UserId IS NULL , क्योंकि हम उन मामलों की खोज कर रहे हैं जहां दिए गए यूजर आईडी के लिए कोई बड़ी तारीख नहीं मिलती।

 SELECT userid, MAX(value) KEEP (DENSE_RANK FIRST ORDER BY date DESC) FROM table GROUP BY userid 

मैं आपके सटीक स्तंभ नामों को नहीं जानता, लेकिन ऐसा कुछ ऐसा होगा:

     यूजरआईड का चयन करें, मान
       उपयोगकर्ताओं से यू 1
      जहां तारीख = (अधिकतम चुनें (तारीख)
                      उपयोगकर्ताओं से यू 2
                     जहां u1.userid = u2.userid)

काम पर नहीं होने पर, मेरे हाथ में ओरेकल नहीं है, लेकिन मुझे लगता है कि ओरेकल कई कॉलमों को इन खंडों में मिलान करने की अनुमति देता है, जो कम से कम विकल्पों से बचने के लिए आवश्यक होता है जो एक सहसंबद्ध उपकुंजी का उपयोग करते हैं, जो कि शायद ही कभी अच्छा है विचार।

ऐसा कुछ, शायद (यह याद नहीं रख सकता है कि स्तंभ सूची को कोष्ठक होना चाहिए या नहीं):

 SELECT * FROM MyTable WHERE (User, Date) IN ( SELECT User, MAX(Date) FROM MyTable GROUP BY User) 

संपादित करें: बस वास्तविक के लिए इसे करने की कोशिश की:

 SQL> create table MyTable (usr char(1), dt date); SQL> insert into mytable values ('A','01-JAN-2009'); SQL> insert into mytable values ('B','01-JAN-2009'); SQL> insert into mytable values ('A', '31-DEC-2008'); SQL> insert into mytable values ('B', '31-DEC-2008'); SQL> select usr, dt from mytable 2 where (usr, dt) in 3 ( select usr, max(dt) from mytable group by usr) 4 / U DT - --------- A 01-JAN-09 B 01-JAN-09 

तो यह काम करता है, यद्यपि अन्य जगहों के बारे में बताए गए नए-नए प्रकार के सामानों में अधिक प्रदर्शनकारी हो सकते हैं।

मुझे पता है आपने ओरेकल के लिए पूछा था, लेकिन SQL 2005 में हम इसका उपयोग करते हैं:

 -- Single Value ;WITH ByDate AS ( SELECT UserId, Value, ROW_NUMBER() OVER (PARTITION BY UserId ORDER BY Date DESC) RowNum FROM UserDates ) SELECT UserId, Value FROM ByDate WHERE RowNum = 1 -- Multiple values where dates match ;WITH ByDate AS ( SELECT UserId, Value, RANK() OVER (PARTITION BY UserId ORDER BY Date DESC) Rnk FROM UserDates ) SELECT UserId, Value FROM ByDate WHERE Rnk = 1 

क्या एक योग्यता का खंड दोनों सरलतम और सबसे अच्छा नहीं होगा?

 select userid, my_date, ... from users qualify rank() over (partition by userid order by my_date desc) = 1 

संदर्भ के लिए, यहां टेराटाटा पर इस योग्यता का आकार 17 के दशक में इस योग्यता संस्करण के साथ और 'इनलाइन व्यू' / एल्ड्रिज समाधान # 1 के साथ 23 के दशक में चलता है।

मेरे पास यह परीक्षण करने के लिए ओरेकल नहीं है, लेकिन सबसे कुशल समाधान विश्लेषणात्मक प्रश्नों का उपयोग करना है। यह कुछ इस तरह दिखना चाहिए:

 SELECT DISTINCT UserId , MaxValue FROM ( SELECT UserId , FIRST (Value) Over ( PARTITION BY UserId ORDER BY Date DESC ) MaxValue FROM SomeTable ) 

मुझे संदेह है कि आप बाह्य क्वेरी से छुटकारा पा सकते हैं और अंदरूनी पर अलग डाल सकते हैं, लेकिन मुझे यकीन नहीं है। इस बीच मुझे पता है कि यह एक काम करता है।

यदि आप विश्लेषणात्मक प्रश्नों के बारे में जानना चाहते हैं, तो मैं http://www.orafaq.com/node/55 और http://www.akadia.com/services/ora_analytic_functions.html को पढ़ने का सुझाव देता हूं। यहाँ संक्षिप्त सारांश है

हुड विश्लेषणात्मक क्वेरी के तहत पूरे डाटासेट को सॉर्ट करें, फिर इसे क्रमिक रूप से संसाधित करें जैसा कि आप इसे संसाधित करते हैं, आप कुछ मानदंडों के अनुसार डाटासेट को विभाजित करते हैं, और फिर प्रत्येक पंक्ति के लिए कुछ विंडो में दिखता है (मौजूदा पंक्ति में विभाजन में पहले मान के लिए डिफ़ॉल्ट – यह डिफ़ॉल्ट भी सबसे कुशल है) और एक विश्लेषणात्मक कार्यों की संख्या (सूची, जो कुल कार्यों के समान होती है)

इस मामले में यह है कि आंतरिक प्रश्न क्या करता है। पूरे डाटासेट को UserId द्वारा तब दिनांक DESC द्वारा सॉर्ट किया गया है। फिर यह एक पास में प्रक्रिया करता है प्रत्येक पंक्ति के लिए आप यूज़र आईडी और उस यूज़रआईडी के लिए पहली तारीख को वापस लौटाते हैं (चूंकि तिथियों को डीईएससी के अनुसार सॉर्ट किया गया है, यह अधिकतम तारीख है)। यह आपको डुप्लिकेट की गई पंक्तियों के साथ आपका उत्तर देता है। फिर बाहरी दूरी स्क्वैश डुप्लिकेट।

यह विश्लेषणात्मक प्रश्नों का विशेष रूप से शानदार उदाहरण नहीं है। एक बहुत बड़ी जीत के लिए वित्तीय प्राप्ति की एक तालिका लेना और प्रत्येक उपयोगकर्ता और रसीद की गणना करने पर विचार करते हैं, जो उन्होंने भुगतान किया था विश्लेषणात्मक प्रश्न उस कुशलतापूर्वक हल करते हैं अन्य समाधान कम कुशल हैं यही वजह है कि वे 2003 एसक्यूएल मानक का हिस्सा हैं। (दुर्भाग्य से पोस्टग्रेड्स में उन्हें अभी तक नहीं है Grrr …)

PostgreSQL 9 के साथ, आप इसका उपयोग कर सकते हैं:

 select user_id, user_value_1, user_value_2 from (select user_id, user_value_1, user_value_2, row_number() over (partition by user_id order by user_date desc) from users) as r where r.row_number=1 
 Select UserID, Value, Date From Table, ( Select UserID, Max(Date) as MDate From Table Group by UserID ) as subQuery Where Table.UserID = subQuery.UserID and Table.Date = subQuery.mDate 

सिर्फ काम पर "लाइव" उदाहरण लिखना था 🙂

यह एक ही तिथि पर UserId के लिए एकाधिक मानों का समर्थन करता है।

कॉलम: यूज़र आईडी, वैल्यू, डेट

 SELECT DISTINCT UserId, MAX(Date) OVER (PARTITION BY UserId ORDER BY Date DESC), MAX(Values) OVER (PARTITION BY UserId ORDER BY Date DESC) FROM ( SELECT UserId, Date, SUM(Value) As Values FROM <<table_name>> GROUP BY UserId, Date ) 

आप MAX की बजाय FIRST_VALUE का उपयोग कर सकते हैं और समझाने की योजना में इसे देख सकते हैं। मेरे पास इसके साथ खेलने का समय नहीं था।

बेशक, यदि विशाल टेबलों के माध्यम से खोज रहे हैं, तो शायद यह बेहतर होगा कि आप अपनी क्वेरी में पूर्ण संकेत का उपयोग करते हैं।

 select VALUE from TABLE1 where TIME = (select max(TIME) from TABLE1 where DATE= (select max(DATE) from TABLE1 where CRITERIA=CRITERIA)) 

मुझे ऐसा कुछ लगता है (किसी भी वाक्य रचना गलतियों के लिए मुझे माफ कर दो; मैं इस बिंदु पर HQL का उपयोग करने के लिए उपयोग किया जाता है!)

संपादित करें: इसके अलावा सवाल भूल जाओ! क्वेरी को सही किया …

 SELECT UserId, Value FROM Users AS user WHERE Date = ( SELECT MAX(Date) FROM Users AS maxtest WHERE maxtest.UserId = user.UserId ) 

मैं बात कर रहा हूं कि आप इस संस्करण को पिछली क्वेरी में बता सकते हैं:

 SELECT UserId, Value FROM Users U1 WHERE Date = ( SELECT MAX(Date) FROM Users where UserId = U1.UserId) 

(टी-एसक्यूएल) पहले सभी उपयोगकर्ताओं को और उनके अधिकतम डिटेक्ट्स प्राप्त करें अधिकतमडेट्स पर मौजूद उपयोगकर्ताओं के लिए इसी मान ढूंढने के लिए तालिका के साथ जुड़ें।

 create table users (userid int , value int , date datetime) insert into users values (1, 1, '20010101') insert into users values (1, 2, '20020101') insert into users values (2, 1, '20010101') insert into users values (2, 3, '20030101') select T1.userid, T1.value, T1.date from users T1, (select max(date) as maxdate, userid from users group by userid) T2 where T1.userid= T2.userid and T1.date = T2.maxdate 

परिणाम:

 userid value date ----------- ----------- -------------------------- 2 3 2003-01-01 00:00:00.000 1 2 2002-01-01 00:00:00.000 

यहां उत्तर केवल ओरेकल है यहां सभी एसक्यूएल में थोड़ा और अधिक परिष्कृत जवाब दिया गया है:

सबसे अच्छा समग्र होमवर्क परिणाम (होमवर्क अंक का अधिकतम योग) कौन है?

 SELECT FIRST, LAST, SUM(POINTS) AS TOTAL FROM STUDENTS S, RESULTS R WHERE S.SID = R.SID AND R.CAT = 'H' GROUP BY S.SID, FIRST, LAST HAVING SUM(POINTS) >= ALL (SELECT SUM (POINTS) FROM RESULTS WHERE CAT = 'H' GROUP BY SID) 

और एक और कठिन उदाहरण, जिसे कुछ स्पष्टीकरण की आवश्यकता है, जिसके लिए मेरे पास समय नहीं है:

किताब (आईएसबीएन और शीर्षक) जो कि 2008 में सबसे लोकप्रिय है, अर्थात, 2008 में सबसे ज्यादा उधार ली गई है, दीजिए।

 SELECT X.ISBN, X.title, X.loans FROM (SELECT Book.ISBN, Book.title, count(Loan.dateTimeOut) AS loans FROM CatalogEntry Book LEFT JOIN BookOnShelf Copy ON Book.bookId = Copy.bookId LEFT JOIN (SELECT * FROM Loan WHERE YEAR(Loan.dateTimeOut) = 2008) Loan ON Copy.copyId = Loan.copyId GROUP BY Book.title) X HAVING loans >= ALL (SELECT count(Loan.dateTimeOut) AS loans FROM CatalogEntry Book LEFT JOIN BookOnShelf Copy ON Book.bookId = Copy.bookId LEFT JOIN (SELECT * FROM Loan WHERE YEAR(Loan.dateTimeOut) = 2008) Loan ON Copy.copyId = Loan.copyId GROUP BY Book.title); 

उम्मीद है कि यह मदद करता है (किसी को भी) .. 🙂

सादर, ग्यूस

मान लें कि किसी दिए गए यूजरआईडी के लिए दिनांक अद्वितीय है, यहाँ कुछ टीएसक्यूएल है:

 SELECT UserTest.UserID, UserTest.Value FROM UserTest INNER JOIN ( SELECT UserID, MAX(Date) MaxDate FROM UserTest GROUP BY UserID ) Dates ON UserTest.UserID = Dates.UserID AND UserTest.Date = Dates.MaxDate 

मैं पार्टी के लिए बहुत देर हो चुकी हूं लेकिन निम्नलिखित हैक दोनों सहसंबद्ध subqueries और किसी भी एनालिटिक्स फ़ंक्शन को मात देगा, लेकिन एक प्रतिबंध है: मूल्यों को तार में परिवर्तित करना चाहिए इसलिए यह दिनांक, संख्याओं और अन्य तारों के लिए काम करता है। कोड अच्छा नहीं दिखता है, लेकिन निष्पादन प्रोफ़ाइल बहुत अच्छा है।

 select userid, to_number(substr(max(to_char(date,'yyyymmdd') || to_char(value)), 9)) as value, max(date) as date from users group by userid 

इसका कारण यह कोड इतनी अच्छी तरह से काम करता है कि यह केवल एक बार तालिका को स्कैन करने की आवश्यकता है इसमें किसी भी अनुक्रमित की आवश्यकता नहीं है और सबसे महत्वपूर्ण रूप से तालिका को सॉर्ट करने की आवश्यकता नहीं है, जो कि अधिकांश एनालिटिक्स कार्य करते हैं यदि एक एकल यूजरआइड के लिए परिणाम को फ़िल्टर करना पड़ता है, तो इंडेक्स मदद करेगा।

Oracle 12c+ , आप उपकुंजी के बिना इसे बहुत आसानी से हासिल करने के लिए एनालिटिक फ़ंक्शन rank के साथ शीर्ष एन प्रश्नों का उपयोग कर सकते हैं:

 select * from your_table order by rank() over (partition by user_id order by my_date desc) fetch first 1 row with ties; 

उपरोक्त सभी पंक्तियां प्रति उपयोगकर्ता अधिकतम my_date के साथ देता है

यदि आप अधिकतम तारीख के साथ केवल एक पंक्ति चाहते हैं, तो rank को row_number से row_number :

 select * from your_table order by row_number() over (partition by user_id order by my_date desc) fetch first 1 row with ties; 
 select userid, value, date from thetable t1 , ( select t2.userid, max(t2.date) date2 from thetable t2 group by t2.userid ) t3 where t3.userid t1.userid and t3.date2 = t1.date 

IMHO यह काम करता है HTH

मुझे लगता है कि यह काम करना चाहिए?

 Select T1.UserId, (Select Top 1 T2.Value From Table T2 Where T2.UserId = T1.UserId Order By Date Desc) As 'Value' From Table T1 Group By T1.UserId Order By T1.UserId 

सबसे पहले मैं सही उत्तर के बाद प्रश्न को भूल गया, सही परिणाम के साथ यहां एक पूर्ण उदाहरण है:

 CREATE TABLE table_name (id int, the_value varchar(2), the_date datetime); INSERT INTO table_name (id,the_value,the_date) VALUES(1 ,'a','1/1/2000'); INSERT INTO table_name (id,the_value,the_date) VALUES(1 ,'b','2/2/2002'); INSERT INTO table_name (id,the_value,the_date) VALUES(2 ,'c','1/1/2000'); INSERT INTO table_name (id,the_value,the_date) VALUES(2 ,'d','3/3/2003'); INSERT INTO table_name (id,the_value,the_date) VALUES(2 ,'e','3/3/2003'); 

  select id, the_value from table_name u1 where the_date = (select max(the_date) from table_name u2 where u1.id = u2.id) 

 id the_value ----------- --------- 2 d 2 e 1 b (3 row(s) affected) 

यह डुप्लिकेट का भी ध्यान रखेगा (प्रत्येक user_id के लिए एक पंक्ति लौटाएं):

 SELECT * FROM ( SELECT u.*, FIRST_VALUE(u.rowid) OVER(PARTITION BY u.user_id ORDER BY u.date DESC) AS last_rowid FROM users u ) u2 WHERE u2.rowid = u2.last_rowid 

बस इस का परीक्षण किया और यह एक लॉगिंग तालिका पर काम करने लगता है

 select ColumnNames, max(DateColumn) from log group by ColumnNames order by 1 desc 

यह उतना ही सरल होना चाहिए:

 SELECT UserId, Value FROM Users u WHERE Date = (SELECT MAX(Date) FROM Users WHERE UserID = u.UserID) 

यदि आप पोस्टग्रेज़ का उपयोग कर रहे हैं, तो आप जैसे array_agg उपयोग कर सकते हैं

 SELECT userid,MAX(adate),(array_agg(value ORDER BY adate DESC))[1] as value FROM YOURTABLE GROUP BY userid 

मैं ओरेकल से परिचित नहीं हूँ मैंने ये ढूंढ निकाला

 SELECT userid, MAX(adate), SUBSTR( (LISTAGG(value, ',') WITHIN GROUP (ORDER BY adate DESC)), 0, INSTR((LISTAGG(value, ',') WITHIN GROUP (ORDER BY adate DESC)), ',')-1 ) as value FROM YOURTABLE GROUP BY userid 

दोनों प्रश्न स्वीकार किए गए उत्तर के रूप में एक ही परिणाम वापस आते हैं। SQLFiddles देखें:

  1. स्वीकृत उत्तर
  2. पोस्टग्रेज़ के साथ मेरा समाधान
  3. ओरेकल के साथ मेरा समाधान

इस लिंक की जांच करें यदि आपके प्रश्न उस पृष्ठ जैसा दिखते हैं, तो मैं आपको निम्न प्रश्न का सुझाव देता हूं जो उस लिंक के लिए समाधान देगा

select distinct sno,item_name,max(start_date) over(partition by sno),max(end_date) over(partition by sno),max(creation_date) over(partition by sno), max(last_modified_date) over(partition by sno) from uniq_select_records order by sno,item_name asc;

उस लिंक से संबंधित सटीक परिणाम दिए जाएंगे

यदि (यूज़र आईडी, दिनांक) अद्वितीय है, यानी कोई भी उपयोगकर्ता उसी उपयोगकर्ता के लिए दो बार नहीं दिखाई देता है:

 select TheTable.UserID, TheTable.Value from TheTable inner join (select UserID, max([Date]) MaxDate from TheTable group by UserID) UserMaxDate on TheTable.UserID = UserMaxDate.UserID TheTable.[Date] = UserMaxDate.MaxDate; 
 select UserId,max(Date) over (partition by UserId) value from users; 

MySQL के लिए समाधान जिसमें विभाजन KEEP, DENSE_RANK का अवधारणा नहीं है।

 select userid, my_date, ... from ( select @sno:= case when @pid<>userid then 0 else @sno+1 end as serialnumber, @pid:=userid, my_Date, ... from users order by userid, my_date ) a where a.serialnumber=0 

संदर्भ: http://benincampus.blogspot.com/2013/08/select-rows-which-have-maxmin-value-in.html