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

कम आबादी वाले डेटाबेस तालिका से दिन की प्रति मिनट एक पंक्ति उत्पन्न करें

सुनिश्चित करें कि दिनांक कॉलम में एक इंडेक्स है और प्रदर्शन उचित होना चाहिए।

SELECT t.Date,
COUNT(*) AS Quantity,
(SELECT COUNT(*) FROM Table WHERE Date < t.Date) AS RunningTotal
FROM Table t
GROUP BY t.Date

एक पंक्ति प्रति मिनट से भरी हुई तालिका को निम्न प्रकार से बहुत तेज़ी से प्राप्त किया जा सकता है:

DECLARE @StartDate smalldatetime
DECLARE @EndDate smalldatetime

SET @StartDate = '1 jan 2009' --MIN(TimeStamp) FROM Table
SET @EndDate = '2 jan 2009' --MAX(TimeStamp) FROM Table

SET @StartDate = DATEADD(minute,-DATEPART(minute,@StartDate),@StartDate)
SET @EndDate = DATEADD(minute,-DATEPART(minute,@EndDate),@EndDate)


; WITH DateIntervalsCTE AS
(
SELECT 0 i, @startdate AS Date
UNION ALL
SELECT i + 1, DATEADD(minute, i, @startdate )
FROM DateIntervalsCTE 
WHERE DATEADD(minute, i, @startdate ) <= @enddate
)
SELECT DISTINCT Date FROM DateIntervalsCTE
OPTION (MAXRECURSION 32767);

बशर्ते आपको रिकर्सन प्रतिबंधों के कारण केवल <~22 दिनों के डेटा की आवश्यकता हो।

अब आपको केवल दोनों को मर्ज करना है, डेटा रखने के लिए एक अस्थायी तालिका का उपयोग करना सबसे तेज़ लगता है

DECLARE @StartDate smalldatetime
DECLARE @EndDate smalldatetime
DECLARE @t TABLE (Date smalldatetime,Quantity int,RunningTotal int)
SET @StartDate = '1 jan 2009' --MIN(TimeStamp) FROM Table
SET @EndDate = '2 jan 2009' --MAX(TimeStamp) FROM Table

SET @StartDate = DATEADD(minute,-DATEPART(minute,@StartDate),@StartDate)
SET @EndDate = DATEADD(minute,-DATEPART(minute,@EndDate),@EndDate)


; WITH DateIntervalsCTE AS
(
SELECT 0 i, @startdate AS Date
UNION ALL
SELECT i + 1, DATEADD(minute, i, @startdate )
FROM DateIntervalsCTE 
WHERE DATEADD(minute, i, @startdate ) <= @enddate
)
INSERT INTO @t (Date) 
SELECT DISTINCT Date FROM DateIntervalsCTE
OPTION (MAXRECURSION 32767);

UPDATE t SET Quantity = (SELECT COUNT(d.TimeStamp) FROM Table d WHERE Date = t.date)
from @t t

update t2 set runningtotal = (SELECT SUM(Quantity) FROM @t WHERE date <= t2.date)
from @t t2

select * from @t


  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 कॉलम में एक फ़ील्ड का चयन करें

  2. गतिविधि तिथि के आधार पर ClaimStatus =1 के साथ दावों को कैसे समाप्त करें। एसक्यूएल सर्वर 2012

  3. आउटपुट में असंबंधित परिणाम?

  4. SHA1 का उपयोग करके Sql Server 2008 पर पासवर्ड एन्क्रिप्ट करें

  5. UTF-8 समर्थन, SQL सर्वर 2012 और UTF8String UDT