SSMS
 sql >> डेटाबेस >  >> Database Tools >> SSMS

समान डेटा के सेट के लिए दिनांक सीमा

गैर-संबंधपरक समाधान

मुझे नहीं लगता कि कोई अन्य उत्तर सही है।

  • GROUP BY काम नहीं करेगा

  • ROW_NUMBER() का उपयोग करना डेटा को एक रिकॉर्ड फाइलिंग सिस्टम संरचना में बाध्य करता है, जो भौतिक है, और फिर इसे भौतिक रिकॉर्ड के रूप में संसाधित करता है। बड़े पैमाने पर प्रदर्शन लागत पर। बेशक, ऐसा कोड लिखने के लिए, यह आपको सोचने . के लिए मजबूर करता है संबंधपरक शब्दों में सोचने के बजाय RFS के संदर्भ में।

  • सीटीई का उपयोग करना वही है। डेटा के माध्यम से पुनरावृत्ति, विशेष रूप से डेटा जो नहीं बदलता है। थोड़ी अलग भारी कीमत पर।

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

संबंधपरक समाधान

  1. आपका डेटा संबंधपरक, तार्किक है, दो दिए गए डेटा कॉलम सभी आवश्यक हैं।

  2. निश्चित रूप से, हमें वांछित रिपोर्ट प्राप्त करने के लिए एक दृश्य (व्युत्पन्न संबंध) बनाना होगा, लेकिन इसमें शुद्ध चयन शामिल हैं, जो प्रसंस्करण के लिए काफी अलग है (इसे फ़ाइल में परिवर्तित करना) , जो भौतिक है, और फिर फ़ाइल . को संसाधित कर रहा है; या अस्थायी टेबल; या वर्कटेबल्स; या सीटीई; या ROW_Number (); आदि)।

  3. "सैद्धांतिक" के विलाप के विपरीत, जिनके पास एक एजेंडा है, SQL रिलेशनल डेटा को पूरी तरह से संभालता है। और आपका डेटा रिलेशनल है।

इसलिए, एक संबंधपरक मानसिकता, डेटा का एक संबंधपरक दृष्टिकोण और एक सेट-प्रोसेसिंग मानसिकता बनाए रखें। एक रिलेशनल डेटाबेस पर प्रत्येक रिपोर्ट आवश्यकता को एक एकल चयन का उपयोग करके पूरा किया जा सकता है। 1970 से पहले के ISAM फ़ाइल प्रबंधन विधियों को वापस लेने की कोई आवश्यकता नहीं है।

मैं मान लूंगा कि प्राथमिक कुंजी (स्तंभों का समूह जो एक संबंधपरक पंक्ति विशिष्टता देता है) Date, है और दिए गए उदाहरण डेटा के आधार पर, डेटाटाइप DATE. . है

इसे आजमाएं:

    CREATE VIEW MyTable_Base_V          -- Foundation View
    AS
        SELECT  Date,
                Date_Next,
                Price
            FROM (
            -- Derived Table: project rows with what we need
            SELECT  Date,
                    [Date_Next] = DATEADD( DD, 1, O.Date ),
                    Price,
                    [Price_Next] = (

                SELECT Price            -- NULL if not exists
                    FROM MyTable
                    WHERE Date = DATEADD( DD, 1, O.Date )
                    )

                FROM MyTable MT

                ) AS X
            WHERE Price != Price_Next   -- exclude unchanging rows
    GO

    CREATE VIEW MyTable_V               -- Requested View
    AS
        SELECT  [Date_From] = (
            --  Date of the previous row
            SELECT MAX( Date_Next )     -- previous row
                FROM MyTable_V
                WHERE Date_Next < MT.Date
                ),

                [Date_To] = Date,       -- this row
                Price
            FROM MyTable_Base_V MT
    GO

    SELECT  *
        FROM MyTable_V
    GO

विधि, सामान्य

बेशक यह एक विधि है, इसलिए यह सामान्य है, इसका उपयोग From_ . को निर्धारित करने के लिए किया जा सकता है और To_ किसी भी डेटा श्रेणी का (यहां, एक Date रेंज), किसी भी डेटा परिवर्तन के आधार पर (यहां, Price . में बदलाव )

यहां, आपकी Dates क्रमागत हैं, इसलिए Date_Next . का निर्धारण आसान है:Date बढ़ाएँ 1 दिन तक। अगर PK बढ़ रहा है लेकिन नहीं लगातार (जैसे. DateTime या TimeStamp या कोई अन्य कुंजी), व्युत्पन्न तालिका बदलें X करने के लिए:

    -- Derived Table: project rows with what we need
    SELECT  DateTime,
            [DateTime_Next] = (
            -- first row > this row
        SELECT  TOP 1
                DateTime                -- NULL if not exists
            FROM MyTable
            WHERE DateTime > MT.DateTime
            ),

            Price,
            [Price_Next] = (
            -- first row > this row
        SELECT  TOP 1
                Price                   -- NULL if not exists
            FROM MyTable
            WHERE DateTime > MT.DateTime
            )

        FROM MyTable MT

आनंद लें।

कृपया बेझिझक टिप्पणी करें, प्रश्न पूछें, आदि।



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. SQL सर्वर प्रबंधन स्टूडियो, निष्पादन समय को मिलीसेकंड तक कैसे कम करें

  2. SQL सर्वर प्रबंधन स्टूडियो त्वचा / प्रकटन / लेआउट

  3. मेटाडेटा तालिका के कॉलम डेटा प्रकार को कैसे बदलें। अपडेट स्टेटमेंट कैसा होगा?

  4. Windows XP के लिए SQL सर्वर 2012 प्रबंधन स्टूडियो

  5. क्या मैनेजमेंट स्टूडियो 2012 के लिए पुअर मैन्स टी-एसक्यूएल फॉर्मेटिंग ऐड-इन मैनेजमेंट स्टूडियो 2014 में काम करता है?