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

SQL सर्वर:प्रत्येक आइटम कितने दिनों में प्रत्येक राज्य में था

यह आपको वही परिणाम देता है जो आप मांग रहे हैं, थोड़े अलग प्रारूप में (लेकिन आप आसानी से PIVOT पा सकते हैं समाधान यदि आपको ठीक उसी परिणाम सेट की आवश्यकता है):

declare @t table (ItemId int,Revision int,State varchar(19),DateChanged datetime2)
insert into @t(ItemId,Revision,State,DateChanged) values
(1,1,'New',   '2014-11-13T10:00:00'),
(1,2,'Active','2014-11-15T10:00:00'),
(1,3,'New',   '2014-11-17T10:00:00'),
(1,4,'Active','2014-11-19T10:00:00'),
(1,5,'Active','2014-11-20T10:00:00'),
(1,6,'Closed','2014-11-22T10:00:00'),
(2,1,'New',   '2014-11-13T10:00:00'),
(2,2,'Active','2014-11-16T10:00:00'),
(2,3,'Closed','2014-11-17T10:00:00'),
(2,4,'Active','2014-11-19T10:00:00'),
(2,5,'Closed','2014-11-21T10:00:00')

;With Joined as (
    select t1.ItemId,t1.State,DATEDIFF(day,t1.DateChanged,t2.DateChanged) as Days
    from
        @t t1
            inner join
        @t t2
            on
                t1.ItemId = t2.ItemId and
                t1.Revision = t2.Revision -1
    )
select ItemId,State,SUM(Days)
from Joined
where State <> 'Closed'
group by ItemId,State

परिणाम:

ItemId      State               
----------- ------------------- -----------
1           Active              5
1           New                 4
2           Active              3
2           New                 3

ध्यान दें कि मैं PreviousState . को अनदेखा कर रहा हूं आपके प्रश्न से कॉलम और इसके बजाय Joined . का निर्माण कर रहा हूं क्योंकि वास्तव में क्या मायने रखता है कब अगला राज्य लागू हुआ।

जिन समस्याओं का समाधान नहीं किया गया है क्योंकि आपने उन्हें अपने प्रश्न में वर्णित नहीं किया है:1) यदि वर्तमान अंतिम स्थिति Closed नहीं है तो क्या करें - यानी क्या हम इसे अनदेखा करते हैं, या आज तक गिनते हैं?, और 2) यदि प्रत्येक DateChanged के लिए दिन का समय हो तो क्या करें? वही नहीं है - क्या हमें आंशिक दिनों को संभालना है?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक्सेल फ़ाइल के साथ OPENROWSET

  2. सर्वर पर MSDTC 'सर्वर अनुपलब्ध है'

  3. शून्य या शून्य मानों को अनदेखा करते हुए AVG प्राप्त करें

  4. टी-एसक्यूएल में एसक्यूएल सर्वर रेगुलर एक्सप्रेशन वर्कअराउंड?

  5. SQL सर्वर 2019 में स्केलर UDF इनलाइनिंग