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

SQL दिनांक सीमाओं के विरुद्ध सम्मिलित होता है?

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

अब उन "तैयार" दरों को लेनदेन के साथ जोड़ना सरल और कुशल है।

कुछ इस तरह:

WITH IndexedExchangeRates AS (           
            SELECT  Row_Number() OVER (ORDER BY Date) ix,
                    Date,
                    Rate 
            FROM    ExchangeRates 
        ),
        RangedExchangeRates AS (             
            SELECT  CASE WHEN IER.ix=1 THEN CAST('1753-01-01' AS datetime) 
                    ELSE IER.Date 
                    END DateFrom,
                    COALESCE(IER2.Date, GETDATE()) DateTo,
                    IER.Rate 
            FROM    IndexedExchangeRates IER 
            LEFT JOIN IndexedExchangeRates IER2 
            ON IER.ix = IER2.ix-1 
        )
SELECT  T.Date,
        T.Amount,
        RER.Rate,
        T.Amount/RER.Rate ConvertedAmount 
FROM    Transactions T 
LEFT JOIN RangedExchangeRates RER 
ON (T.Date > RER.DateFrom) AND (T.Date <= RER.DateTo)

नोट:

  • आप GETDATE() . को बदल सकते हैं दूर भविष्य में एक तारीख के साथ, मैं यहां मान रहा हूं कि भविष्य के लिए कोई दर ज्ञात नहीं है।

  • नियम (बी) पहली ज्ञात विनिमय दर की तारीख को SQL सर्वर द्वारा समर्थित न्यूनतम तिथि पर सेट करके कार्यान्वित किया जाता है datetime , जो होना चाहिए (परिभाषा के अनुसार यदि यह वह प्रकार है जिसका उपयोग आप Date . के लिए कर रहे हैं कॉलम) सबसे छोटा संभव मान हो।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एकाधिक कैश आइटम से बचने के लिए डेटाबेस तक पहुंच को कतारबद्ध करें

  2. SQL सर्वर में त्रुटि और लेनदेन को लागू करना

  3. SQL कथन द्वारा तालिका में मैन्युअल रूप से सम्मिलित करें, लेकिन कुंजी स्वत:वृद्धि हुई है

  4. SQL सर्वर एजेंट कार्य संशोधित करें (T-SQL)

  5. एक कॉलम पर MAX () मान के साथ एक पंक्ति चुनें