子查询中的TSQL where子句无效

子查询中的TSQL where子句无效,sql,sql-server,tsql,Sql,Sql Server,Tsql,在这种情况下,我需要使用select语句在一行中选择当前和以前的订单金额 订单表: Customer Id OrderId OrderDate OrderAmount 当前Select语句: SELECT o.OrderId, o.OrderDate, o.OrderAmount, po.OrderAmount FROM Order o LEFT JOIN ( SELECT TOP(1) so.OrderAmount FROM Order so WHERE so.Custom

在这种情况下,我需要使用select语句在一行中选择当前和以前的订单金额

订单表:

Customer Id
OrderId
OrderDate
OrderAmount
当前Select语句:

SELECT o.OrderId, o.OrderDate, o.OrderAmount, po.OrderAmount
FROM Order o
LEFT JOIN (
   SELECT TOP(1) so.OrderAmount
   FROM Order so
   WHERE so.CustomerId = o.CustomerId and so.OrderId <> o.OrderId
   ORDER BY so.OrderDate DESC
   ) po
问题是子查询中不允许使用where子句。是否有其他方法获取此信息

这实际上是对需要当前和上一报告期财务报告数据的视图的更复杂选择的简化。

您需要在此处应用外部数据

但是,您的WHERE子句看起来不正确。我假设OrderDate在下面是唯一的,可以确定前一行

SELECT o.OrderId,
       o.OrderDate,
       o.OrderAmount,
       po.OrderAmount
FROM   [Order] o
       OUTER APPLY(SELECT TOP(1) so.OrderAmount
                   FROM   [Order] so
                   WHERE  so.CustomerId = o.CustomerId
                          AND so.OrderDate < o.OrderDate
                   ORDER  BY so.OrderDate DESC) po  

在此输入代码WHERE子句无效,因为子select没有o别名的上下文

你是说:

ON so.OrderId <> o.OrderId

来说明行数的概念

with TheOrders as
( 
    select  row_number() over(order by orderdate desc) as RowNum,
            o.OrderId as OrderId
    from Orders o
)
select * from TheOrders

当前订单是指最近的订单吗?那么,您是否只是希望获得So.orderDae desc订购的前2个订单?上一行是如何确定的?ORDER BY OrderDate是否明确无关联?或者应该是ORDER BY OrderDate、OrderId,以便在多行具有相同OrderDate值的情况下提供关联断路器?@Martin-您可以假设客户每个日期只有一个订单。我已经更新了我的原始问题,以澄清我的问题。@Barry-我试图在一行中获得当前和以前的订单金额。
SELECT o.OrderId, o.OrderDate, o.OrderAmount, po.OrderAmount
FROM Order o
LEFT JOIN (
   SELECT TOP(1) so.OrderAmount
   FROM Order so
   ORDER BY so.OrderDate DESC
   ) po on po.OrderId <> o.OrderId
with TheOrders as
( 
    select  row_number() over(order by orderdate desc) as RowNum,
            o.OrderId as OrderId
    from Orders o
)
select * from TheOrders