2016-02-29 65 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