2016-02-29 61 views
-1

我創建了一個查詢,但它不工作。任何人都可以向我解釋這個嗎?謝謝!SQL WITH NOT

WITH rows AS 
    (
    SELECT *, ROW_NUMBER() OVER (ORDER BY dtDeliveryDate) AS rn 
    FROM TCheckRecipient 
    ) 

select avg(avarage) from(  
SELECT TCheck.iCheckId, AVG(DATEDIFF(minute, mc.dtDeliveryDate, mp.dtDeliveryDate)) as avarage 
FROM rows mc 
left join TCheck on TCheck.iCheckId = mc.iCheckId 

JOIN rows mp 
ON  mc.rn = mp.rn - 1 
group by TCheck.iCheckId 
) 

我在做

WITH rows AS 
     (
     SELECT *, ROW_NUMBER() OVER (ORDER BY dtDeliveryDate) AS rn 
     FROM TCheckRecipient 
     ) 

SELECT TCheck.iCheckId, AVG(DATEDIFF(minute, mc.dtDeliveryDate, mp.dtDeliveryDate)) as avarage 
FROM rows mc 
left join TCheck on TCheck.iCheckId = mc.iCheckId 

JOIN rows mp 
ON  mc.rn = mp.rn - 1 
group by TCheck.iCheckId 

它運作良好。 但是,當我試圖讓這些收益的平均值,而我不能, 我會很高興,如果有人回答我該怎麼辦呢謝謝

+0

你得到的錯誤是什麼?很可能你需要在子查詢上添加一個別名,即在右括號後面,例如「A」,以便內查詢在外查詢 –

+0

'group by TCheck.iCheckId 中有一個引用)當我在做什麼? – artm

+3

「這不起作用」不是一個很好的描述。它不會編譯,它會拋出一個錯誤,它會給出意想不到的輸出嗎? – HoneyBadger

回答

2

我把一個答案讓我的評論有更清晰。您可能只需要別名內部查詢。

WITH rows AS 
    (
    SELECT *, ROW_NUMBER() OVER (ORDER BY dtDeliveryDate) AS rn 
    FROM TCheckRecipient 
    ) 

select avg(avarage) from(  
SELECT TCheck.iCheckId, AVG(DATEDIFF(minute, mc.dtDeliveryDate, mp.dtDeliveryDate)) as avarage 
FROM rows mc 
left join TCheck on TCheck.iCheckId = mc.iCheckId 

JOIN rows mp 
ON  mc.rn = mp.rn - 1 
group by TCheck.iCheckId 
) A