3

私は自分の報告ルーチンの1つで突然の失敗を経験し、それを私の声明の一部を持っていることにさかのぼりました。dbo.data_feed_fileこれが2日前まで提供していた機能は、テーブルから最新の日付を選択することでした(列名:) 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値がないことを確認しました。

4

1 に答える 1

1

行が返されない理由は 2 つ考えられます。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))

2 つ目は、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))
于 2012-10-24T19:16:21.623 に答える