Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择每个组的最大日期记录时出错_Sql_Sql Server - Fatal编程技术网

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