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

SQL सर्वर 2008 में लीड () और एलएजी () कार्यक्षमता

आप टेबल को खुद से जोड़कर सही रास्ते पर हैं। मैंने इसे नीचे करने के 2 तरीकों को शामिल किया है जो यहां ठीक काम करना चाहिए। पहली तरकीब आपके ROW_NUMBER . में है , उपयोगकर्ता आईडी द्वारा विभाजन करना और तिथि के अनुसार क्रमबद्ध करना सुनिश्चित करें। फिर आप या तो INNER JOIN . का उपयोग कर सकते हैं एकत्रीकरण के साथ या CROSS APPLY अपने कुल योग बनाने के लिए।

विभाजित ROW_NUMBER() के साथ डेटा सेट करना :

DECLARE @Data TABLE (
    RowNum INT,
    UserId INT,
    Date DATE,
    Miles INT
)
INSERT @Data 
    SELECT
        ROW_NUMBER() OVER (PARTITION BY UserId
            ORDER BY Date) AS RowNum,
        *
    FROM (
        SELECT 1, '2015-01-01', 5
        UNION ALL SELECT 1, '2015-01-02', 6
        UNION ALL SELECT 2, '2015-01-01', 7
        UNION ALL SELECT 2, '2015-01-02', 3
        UNION ALL SELECT 2, '2015-01-03', 2
        ) T (UserId, Date, Miles)

INNER JOIN का उपयोग करें एकत्रीकरण के साथ

SELECT
    D1.UserId,
    D1.Date,
    D1.Miles,
    SUM(D2.Miles) AS [Total]
FROM @Data D1
    INNER JOIN @Data D2
        ON D1.UserId = D2.UserId
            AND D2.RowNum <= D1.RowNum
GROUP BY
    D1.UserId,
    D1.Date,
    D1.Miles

CROSS APPLY का उपयोग करें चल रहे कुल के लिए

SELECT
    UserId,
    Date,
    Miles,
    Total
FROM @Data D1
    CROSS APPLY (
        SELECT SUM(Miles) AS Total
        FROM @Data
        WHERE UserId = D1.UserId
            AND RowNum <= D1.RowNum
    ) RunningTotal

आउटपुट प्रत्येक विधि के लिए समान है:

UserId      Date       Miles       Total
----------- ---------- ----------- -----------
1           2015-01-01 5           5
1           2015-01-02 6           11
2           2015-01-01 7           7
2           2015-01-02 3           10
2           2015-01-03 2           12



  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 सर्वर (T-SQL) में डेटाबेस मेल खाता हटाएं

  3. संग्रहित प्रक्रियाओं के भीतर से परिणाम सेट तक पहुंच ट्रांजैक्ट-एसक्यूएल एसक्यूएल सर्वर

  4. डेटाबेस को कॉपी करने का सबसे अच्छा तरीका क्या है?

  5. SQL सर्वर के लिए मावेन निर्भरता की स्थापना