Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

नवीनतम मूल्य प्राप्त करने के लिए SQL क्वेरी

मुझे लगता है कि आपकी तालिका संरचना के साथ एकमात्र समाधान सबक्वायरी के साथ काम करना है:

SELECT *
   FROM Thing
   WHERE ID IN (SELECT max(ID) FROM Thing 
                   WHERE ThingID IN (1,2,3,4)
                   GROUP BY ThingID)

(उच्चतम आईडी का अर्थ नवीनतम मूल्य भी है)

हालाँकि मेरा सुझाव है कि आप एक "IsCurrent" कॉलम जोड़ें जो कि 0 है यदि यह नवीनतम मूल्य नहीं है या यदि यह नवीनतम है तो 1 है। यह असंगत डेटा के संभावित जोखिम को जोड़ देगा, लेकिन जब तालिका बड़ी हो जाती है (यदि यह एक अनुक्रमणिका में है) तो यह पूरी प्रक्रिया को बहुत तेज कर देगी। फिर आपको बस इतना करना है...

SELECT *
   FROM Thing
   WHERE ThingID IN (1,2,3,4)
     AND IsCurrent = 1

अपडेट करें

ठीक है, मार्कस ने यह दिखाने के लिए प्रश्न अपडेट किया कि आईडी एक अद्वितीय है, इंट नहीं। इससे क्वेरी लिखना और भी जटिल हो जाता है।

SELECT T.* 
   FROM Thing T
   JOIN (SELECT ThingID, max(PriceDateTime)
            WHERE ThingID IN (1,2,3,4)
            GROUP BY ThingID) X ON X.ThingID = T.ThingID 
                                AND X.PriceDateTime = T.PriceDateTime
   WHERE ThingID IN (1,2,3,4)

मैं वास्तव में या तो "IsCurrent" कॉलम का उपयोग करने का सुझाव देता हूं या उत्तरों में पाए गए अन्य सुझावों के साथ जाता हूं और "वर्तमान मूल्य" तालिका और एक अलग "मूल्य इतिहास" तालिका का उपयोग करता हूं (जो अंततः सबसे तेज़ होगा, क्योंकि यह कीमत रखता है टेबल ही छोटी)।

(मुझे पता है कि सबसे नीचे ThingID बेमानी है। बस कोशिश करें कि यह "WHERE" के साथ या उसके बिना तेज़ है या नहीं। सुनिश्चित नहीं है कि ऑप्टिमाइज़र के काम करने के बाद कौन सा संस्करण तेज़ होगा।)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या मैं प्रत्येक n सेकंड में एक संग्रहित प्रो को कॉल करने के लिए SQL सर्वर प्राप्त कर सकता हूं?

  2. बिटवाइज़-या एक सबक्वेरी में एकत्रित करें

  3. कैसे जांचें कि एक स्ट्रिंग एक अद्वितीय पहचानकर्ता है या नहीं?

  4. मैं SQL Server 2008 में संग्रहीत कार्यविधि की स्क्रिप्ट को छिपाना चाहता हूं

  5. SQL सर्वर में लोअरकेस अक्षरों वाली पंक्तियों को वापस करने के 5 तरीके