2011-08-10 30 views
1

私たちのテーブルの1つに日付フィールドがあり、この列からフィルタを作成する必要があります。私は最小年と最大年を取得し、それらの間に年を設定する必要があります。私は簡単に最大と最小を取得し、これを達成するためにスクリプトでループを作成するストアドプロシージャを作成することができますが、SQLでこれを行うためのより良い方法があるのだろうかと思った。 SQL Server 2000を使用しています。日付範囲の最小および最大年の取得

答えて

2

数値/集計表を使用できます。 SQL, Auxiliary table of numbers

ここには、master..spt_valuesを使用したサンプルがあります。

select number as [Year] 
from master..spt_values 
where number between 2008 and 2011 
    and type = 'P' 

結果:

number 
------ 
2008 
2009 
2010 
2011 

ちょうどあなたのminとmax年との間に句の値を置き換えます。

0

ここ@Mikaelの提案はあなたの特定の問題に適用することができる方法の例です:

SELECT 
    v.number AS Year 
FROM master..spt_values v 
    INNER JOIN (
    SELECT 
     YEAR(MIN(Date)) AS MinYear, 
     YEAR(MAX(Date)) AS MaxYear 
    FROM atable 
) ON v.number BETWEEN MinYear AND MaxYear 
WHERE v.type = 'P' 
関連する問題