Sql 选择每个组的最大日期记录时出错
当我尝试运行下面的代码时,我得到以下错误:, “在预期条件的上下文中指定的非布尔类型的表达式,靠近','”我不理解当我只运行了一个类似的查询而没有使用日期时,为什么此查询返回错误。任何帮助都将不胜感激,谢谢Sql 选择每个组的最大日期记录时出错,sql,sql-server,Sql,Sql Server,当我尝试运行下面的代码时,我得到以下错误:, “在预期条件的上下文中指定的非布尔类型的表达式,靠近','”我不理解当我只运行了一个类似的查询而没有使用日期时,为什么此查询返回错误。任何帮助都将不胜感激,谢谢 SELECT * FROM [Rating_Sandbox_Dev].[dbo].[TBL_WC_DEVIATION] AS CLASS_DEV WHERE (CLASS_DEV.State, Eff_Date) = (SELECT State, Max(Eff_Date) FROM [Ra
SELECT *
FROM [Rating_Sandbox_Dev].[dbo].[TBL_WC_DEVIATION] AS CLASS_DEV
WHERE (CLASS_DEV.State, Eff_Date) = (SELECT State, Max(Eff_Date) FROM [Rating_Sandbox_Dev].[dbo].[TBL_WC_DEVIATION])
我认为SQL Server不支持包含多列的
IN
子句(尽管MySQL支持)。但是我们可以在这里使用TOP
:
SELECT TOP 1 *
FROM [Rating_Sandbox_Dev].[dbo].[TBL_WC_DEVIATION]
ORDER BY Eff_Date DESC;
事实上,我认为您的查询的直译应该使用带TIES的TOP 1
,因此如果您希望所有记录都可能与最长生效日期绑定,您可以尝试使用此方法而不是我上面所写的方法
如果您想查找具有最新生效日期的每个州的记录,那么我们可以使用行编号
:
SELECT *
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY State ORDER BY Eff_Date DESC) rn
FROM [Rating_Sandbox_Dev].[dbo].[TBL_WC_DEVIATION]
) t
WHERE rn = 1;
同样,如果您需要这些关系,可以将
行号
替换为秩
SQL Server不支持中带有的元组。没有子查询的一个备选方案是:
select top (1) with ties w.*
from [Rating_Sandbox_Dev].[dbo].[TBL_WC_DEVIATION] w
order by rank() over (partition by state order by eff_date desc);
另一种方法使用相关子查询:
select w.*
from [Rating_Sandbox_Dev].[dbo].[TBL_WC_DEVIATION] w
where w.eff_date = (select max(w2.eff_date)
from [Rating_Sandbox_Dev].[dbo].[TBL_WC_DEVIATION] w2
where w2.state = w.state
);
实际上,如果没有示例输入/输出数据,那么向您发送最佳和正确的查询可能有点困难
但正如错误消息和给定查询中所示,很明显,Where
子句中不能有元组结构
您需要使用上述方法之一或以下方式重写查询:
SELECT CLASS_DEV1.*
FROM [Rating_Sandbox_Dev].[dbo].[TBL_WC_DEVIATION] AS CLASS_DEV1
INNER JOIN [Rating_Sandbox_Dev].[dbo].[TBL_WC_DEVIATION] AS CLASS_DEV2
ON CLASS_DEV1.State = CLASS_DEV2.State
GROUP BY CLASS_DEV1.State,
CLASS_DEV1.Eff_Date
HAVING MAX(CLASS_DEV2.Eff_Date) = CLASS_DEV1.Eff_Date