2012-10-24 66 views
3

我的某個報告例程突然失敗,並且已將其追溯到我的語句的部分。直到2天前爲止,該功能一直在選擇dbo.data_feed_file表中的最新日期(列名:File_Date)。SQL語句選擇最近的日期不再起作用

聲明如下

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

是否存在NULL file_date?有些RDBMS將它們排序爲MAX,有些則爲MIN,不知道Sql Server。 – Karl

+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)) 
+0

謝謝戈登,你釘住瞭解決方案。 –

+0

@ChrisWoodend;哪一個呢? NULL或日期時間? – Karl

+0

@Karl這是日期時間。顯然有人在外部數據庫中進行了模式更改,並沒有通知任何人。 –