选择最近日期的SQL语句不再有效

时间:2012-10-24 19:03:30

标签: sql sql-server-2008

我的一个报告例程突然失败,并将其追溯到我的声明的部分内容。直到2天前,它一直在服务的功能是从dbo.data_feed_file表(列名:File_Date)中选择最近的日期。

声明如下

HAVING (dbo.data_feed_file.file_date = (Select MAX(File_Date) as Expr1
                                        FROM dbo.data_feed_file AS data_feed_file_1))

首先:有没有其他方式来写这个?我已经通过删除声明来完成我的报告,它只比我想要的多250万行。我知道我可以硬编码日期来拉动我想要的特定日期,但显然首选自动化。

第二:有谁知道什么可能导致这种情况自发失败?我是唯一有权编辑此查询的人,所以我知道没有任何改变(没有真正改变)。

提前致谢。

编辑:添加说明:没有错误消息,列标题按预期显示但没有填充数据,它只是空白字段(好像没有符合条件)。声明完成,好像没有任何错误。我已经确认File_Date列中没有NULL值。

1 个答案:

答案 0 :(得分:1)

我可以想到没有行会返回的两个原因。第一个是子查询返回NULL。这很容易修复为:

HAVING (dbo.data_feed_file.file_date = (Select MAX(File_Date) as Expr1
                                        FROM dbo.data_feed_file AS data_feed_file_1
                                        where file_date is not null))

第二个是File_Date存储为datetime,而不是date。如果是这样,您可能会有一个where子句筛选出最新的值,并在having子句中将其遗漏。如果您打算使用日期,但该值存储为日期时间,则可以尝试:

HAVING (cast(dbo.data_feed_file.file_date as date) =
                                        (Select cast(MAX(File_Date) as date) as Expr1
                                        FROM dbo.data_feed_file AS data_feed_file_1
                                        where file_date is not null))