SELECT条件用于过滤列

时间:2017-01-12 16:22:35

标签: sql sql-server tsql

我有一个看起来像这样的联合表:
enter image description here

我的目标是过滤LineStatusName列中最后'有效'值后创建的所有记录。 (附图中黄色标记的行)。

这是我到目前为止所做的,它几乎可以按预期工作,但问题是从嵌套选择步骤返回的日期不是'active'的最高时间日期时间值的日期,如果我尝试在嵌套选择的最后执行ORDER BY Changes.ChangeDateTim我得到语法错误:

  

将nvarchar值'30 -9000241'转换为数据类型int 时转换失败。


如果有人可以提出更好的解决方案来完成该任务或改进我的查询,我将不胜感激。

SELECT Orders.OrderID,LineStatuses.LineStatusName,OrderTypes.OrderTypeName,
Changes.ChangeDateTime,Orders.ProjectNumber,Changes.Comments,Changes.ChangeTypeID
FROM Orders 
INNER JOIN Changes ON Changes.ItemID = Orders.OrderID
INNER JOIN LineStatusSettings ON LineStatusSettings.LineStatusSettingID = Changes.NewValue
INNER JOIN LineStatuses ON LineStatuses.LineStatusID= LineStatusSettings.LineStatusID
INNER JOIN OrderTypes ON OrderTypes.OrderTypeID = LineStatusSettings.OrderTypeID
WHERE Orders.OrderID = 194 AND Orders.Deleted=0
AND 
Changes.ChangeDateTime > (
SELECT TOP 1 Changes.ChangeDateTime
FROM Orders 
INNER JOIN Changes ON Changes.ItemID = Orders.OrderID
INNER JOIN LineStatusSettings ON LineStatusSettings.LineStatusSettingID = Changes.NewValue
INNER JOIN LineStatuses ON LineStatuses.LineStatusID= LineStatusSettings.LineStatusID
INNER JOIN OrderTypes ON OrderTypes.OrderTypeID = LineStatusSettings.OrderTypeID
WHERE LineStatuses.LineStatusName = 'active' 
) AND OrderTypes.OrderTypeName NOT IN ('disconnected line')
ORDER BY Changes.ChangeDateTime

1 个答案:

答案 0 :(得分:1)

这是一种方法:

with jt as (
      <your query here>
     )
select jt.*
from jt
where jt.date > (select max(jt2.date)
                 from jt jt2
                 where jt2.orderid = jt.orderid and jt2.linestatusname = 'Active'
                );