使用 sql 显示最近放弃的订单

Show most recent abandoned order using sql

我有三个表:客户、产品、订单

我正在尝试识别已创建放弃订单 (order_status != 'completed') 但没有其他已完成订单 (order_status != 'completed').

我有以下查询,其中 returns 所有满足此条件的订单,但有来自不同订单的多个客户实例,我只需要该客户的一个实例,最好是最近的订单被遗弃了。

SELECT
c.Id as Id,
c.Name as FullName,
o.Id as Order_Id,
o.OrderStatus,
o.OrderDate,
o.PaidByCC,
p.ProductStatus,
From Orders o
Join Customers c
On c.Id = o.CustomerId
Join Product p
On o.ProductId = p.[Product ID]
WHERE o.Type = 'Service'
    AND o.PaidByCC = 0
    AND o.OrderStatus IS NULL
    AND p.State = 'available'
    AND CONVERT(date, o.OrderDate) >= Convert(date, DATEADD(day, -30, GETDATE()))
    AND NOT EXISTS (Select o1.Id
                    From Orders o1
                    Where o1.OrderStatus = 'Placed'
                    AND o.CustomerId = o1.CustomerId)                    

我该怎么做?

这是我的资料: 必须将它放在临时 table 中,因为 sql 2005 不支持 cte。

    SELECT
    c.Id as Id,
    c.Name as FullName,
    o.Id as Order_Id,
    o.OrderStatus,
    o.OrderDate,
    o.PaidByCC,
    p.ProductStatus,
    From Orders o
    Join Customers c
    On c.Id = o.CustomerId into #AllAbandoned
    Join Product p
    On o.ProductId = p.[Product ID]
    WHERE o.Type = 'Service'
        AND o.PaidByCC = 0
        AND o.OrderStatus IS NULL
        AND p.State = 'available'
        AND CONVERT(date, o.OrderDate) >= Convert(date, DATEADD(day, -30, GETDATE()))
        AND NOT EXISTS (Select o1.Id
                        From Orders o1
                        Where o1.OrderStatus = 'Placed'
                        AND o.CustomerId = o1.CustomerId)  
-- Here we only want the abandoned
        AND order_status != 'completed'

-- 这里说的是,取最近的那个

Select * from #AllAbandoned a where not exists(Select 1 From #AllAbandoned b where a.Id = b.Id and a.OrderDate < b.OrderDate)