Sql Query Pervious Row Optimisation

后端 未结 2 1156
粉色の甜心
粉色の甜心 2020-12-06 23:55

Here is my table structure

MyTable
-----------

ObjectID int (Identity),           -- Primary Key
FileName varchar(10),
CreatedDate datetime
...........
....         


        
2条回答
  •  旧巷少年郎
    2020-12-07 00:06

    SELECT t1.FileName, t1.CreatedDate, t2.CreatedDate as PrevCreatedDate
    FROM 
       (SELECT FileName, CreateDate,
              ROW_NUMBER() OVER(PARTITION BY FileName ORDER BY CreatedDate) AS OrderNo
       FROM MyTable) t1
    LEFT JOIN
       (SELECT FileName, CreateDate,
         ROW_NUMBER() OVER(PARTITION BY FileName ORDER BY CreatedDate) AS OrderNo
         FROM MyTable) t2
    ON (t1.FileName = t2.FileName AND t1.OrderNo = t2.OrderNo - 1)
    

    Or may be better use 'WITH', because queries is identical:

    WITH t(ObjectID, FileName, CreatedDate, OrderNo) AS
       (SELECT ObjectID, FileName, CreatedDate,
              ROW_NUMBER() OVER(PARTITION BY FileName ORDER BY CreatedDate) AS OrderNo
       FROM MyTable) 
    SELECT t1.ObjectID, t1.FileName, t1.CreatedDate, t2.CreatedDate AS PrevCreatedDate,
            DATEDIFF("SS", '1900-01-01 00:00:00', 
               COALESCE((t1.CreatedDate - t2.CreatedDate),0)) AS secondsTaken
    FROM t t1 LEFT JOIN t t2 
    ON (t1.FileName = t2.FileName AND t1.OrderNo = t2.OrderNo + 1)
    

提交回复
热议问题