使用 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)
我有三个表:客户、产品、订单
我正在尝试识别已创建放弃订单 (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)