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

SQL सर्वर में दो तिथियों के बीच सभी तिथियां प्राप्त करें

मेरा पहला सुझाव होगा कि आप अपनी कैलेंडर तालिका का उपयोग करें, यदि आपके पास एक नहीं है, तो एक बनाएं। वे बहुत उपयोगी हैं। तब आपकी क्वेरी उतनी ही सरल है:

DECLARE @MinDate DATE = '20140101',
        @MaxDate DATE = '20140106';

SELECT  Date
FROM    dbo.Calendar
WHERE   Date >= @MinDate
AND     Date < @MaxDate;

यदि आप कैलेंडर तालिका नहीं बनाना चाहते हैं या नहीं बना सकते हैं, तब भी आप इसे बिना किसी पुनरावर्ती CTE के मक्खी पर कर सकते हैं:

DECLARE @MinDate DATE = '20140101',
        @MaxDate DATE = '20140106';

SELECT  TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
        Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)
FROM    sys.all_objects a
        CROSS JOIN sys.all_objects b;

इस पर आगे पढ़ने के लिए देखें:

  • लूप के बिना एक सेट या अनुक्रम उत्पन्न करें - भाग 1
  • लूप के बिना एक सेट या अनुक्रम उत्पन्न करें - भाग 2
  • लूप के बिना एक सेट या अनुक्रम उत्पन्न करें - भाग 3

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

तो आपके डेटा के साथ:

  date   | it_cd | qty 
24-04-14 |  i-1  | 10 
26-04-14 |  i-1  | 20

28-04-2014 को मात्रा प्राप्त करने के लिए (जो मैं एकत्र करता हूं वह आपकी आवश्यकता है), आपको वास्तव में उपरोक्त में से किसी की भी आवश्यकता नहीं है, आप बस इसका उपयोग कर सकते हैं:

SELECT  TOP 1 date, it_cd, qty 
FROM    T
WHERE   it_cd = 'i-1'
AND     Date <= '20140428'
ORDER BY Date DESC;

यदि आप इसे किसी विशेष वस्तु के लिए नहीं चाहते हैं:

SELECT  date, it_cd, qty 
FROM    (   SELECT  date, 
                    it_cd, 
                    qty, 
                    RowNumber = ROW_NUMBER() OVER(PARTITION BY ic_id 
                                                    ORDER BY date DESC)
            FROM    T
            WHERE   Date  <= '20140428'
        ) T
WHERE   RowNumber = 1;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2016:डेटा आयात करें

  2. कॉलम के लिए डिफ़ॉल्ट मान के रूप में अनुक्रम

  3. SQL सर्वर में datetime2 बनाम datetimeoffset:क्या अंतर है?

  4. अधिक उन्नत क्वेरी चलाते समय ऑब्जेक्ट बंद होने पर ऑपरेशन की अनुमति नहीं है

  5. SQL सर्वर में दिनांक और समय डेटा प्रकारों के बीच कनवर्ट करना (T-SQL उदाहरण)