从其他表返回最小日期作为子查询

问题描述 投票:0回答:1

我有一个查询,该查询返回所有未结订单,并使用字符串“In List”填充新列(如果关联活动表中存在该订单 ID 的特定活动)。

如何让新列返回特定活动的 min(Activity.ActivityDate) 而不是“IN LIST”字符串,或者如果没有该特定名称的活动则返回 NULL?

这是有效的查询,但不是我想要的:

SELECT 
  Orders.DateOrder,
  Orders.ID,
  case
    WHEN Orders.ID IN (
        SELECT Activity.IDOrder from Activity 
        LEFT OUTER JOIN Orders ON (Activity.IDOrder=Orders.ID)
        where Activity.ActivityName IN ('Processed','Packaged'))
    THEN 'IN LIST'
  END as NewColumn  
FROM Orders 
where Orders.EndDate Is Null

我尝试用 min(Activity.ActivityDate) 替换“IN LIST”,但收到“无法绑定”错误 - 可能是因为它无法在外部查询中识别它。但是,如果我将其添加到外部查询中,我会将结果限制为仅具有特定活动的开放 orderID,而即使不存在活动,我也需要它们。

现有查询运行速度相当慢。

什么是更快的方法?

sql subquery
1个回答
0
投票

这应该可以做到,而且时间也更短:

SELECT 
  o.DateOrder,
  o.ID,
  MIN(a.ActivityDate) NewColumn
FROM Orders o
LEFT JOIN Activity a ON a.IDOrder = o.ID AND a.ActivityName in ('Processed', 'Packaged')
WHERE o.EndDate IS NULL
GROUP BY o.DateOrder, o.ID
© www.soinside.com 2019 - 2024. All rights reserved.