誰かがこのテーブルを毎日更新するテーブルがあります。
ビューを作成したいのですが、このビューを人のように手動で更新するのではなく、自動にしたいと思います。
たとえば、今日が 2012 年 6 月 15 日にテーブルが更新された場合、その人がテーブルを自動的に更新すると、(実行時に) ビューを更新する必要があります。
私の問題は、テーブルが更新される月の最初の日から最後の日までをどのように取得するかです。
誰かがこのテーブルを毎日更新するテーブルがあります。
ビューを作成したいのですが、このビューを人のように手動で更新するのではなく、自動にしたいと思います。
たとえば、今日が 2012 年 6 月 15 日にテーブルが更新された場合、その人がテーブルを自動的に更新すると、(実行時に) ビューを更新する必要があります。
私の問題は、テーブルが更新される月の最初の日から最後の日までをどのように取得するかです。
テーブルが更新された最後の日は今日でなければなりませんよね?テーブルに今日より後のデータが含まれることはありますか?そうでない場合は、「WHERE> =今月の初め」と言うことができますよね?さまざまな文字列変換と連結のトリックを使用して今月の初めを取得できますが、私が好む方法は日付の計算に固執することです。
SELECT [First day of this month] =
DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101');
したがって、あなたの見解では、次のwhere句を使用して、今月の初め以降のデータに制限できます。
WHERE date_col >= DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101')
今より後でデータを除外する必要がある場合は、次を追加できます。
AND date_col < CURRENT_TIMESTAMP
編集
あなたの質問によると、テーブルは毎日更新されます。これが実際には当てはまらず、テーブルが実際に更新された先月から移動する必要がある場合は、上記を次のように変更できます。
WHERE date_col >= (SELECT DATEADD(MONTH,
DATEDIFF(MONTH, '19000101', MAX(date_modified)),
'19000101') FROM dbo.your_table)
私があなたの質問を正しく理解した場合、あなたのテーブルを最終更新日までチェックし、それが起こった月の最初の日を取得する必要がありますか?
それが本当なら、次のようなものが必要です:
DECLARE @maxdate DATETIME
SELECT @maxdate = MAX(ModifiedDate) FROM [yourTable]
SELECT DATEADD(DAY, (DAY(@maxdate) - 1)*(-1), @maxdate)