もう一度試してみましょう。今、私は以下のこのクエリがうまくいくと思います:
SELECT year(cast(rv.value as date)) _year,
p.partition_number,
max_date
FROM sys.partitions p
JOIN sys.indexes i
ON (p.object_id = i.object_id AND p.index_id = i.index_id)
JOIN sys.partition_schemes ps
ON (ps.data_space_id = i.data_space_id)
JOIN sys.partition_functions f
ON (f.function_id = ps.function_id)
LEFT JOIN sys.partition_range_values rv
ON (f.function_id = rv.function_id AND p.partition_number = rv.boundary_id)
JOIN sys.destination_data_spaces dds
ON (dds.partition_scheme_id = ps.data_space_id
AND dds.destination_id = p.partition_number)
JOIN sys.filegroups fg
ON (dds.data_space_id = fg.data_space_id)
INNER JOIN (
select year([partitioncol]) year,
max([partitioncol]) max_date
from TABLE1 group by year([partitioncol])
) table1
ON (table1.year=year(cast(rv.value as date)))
WHERE i.index_id < 2
AND i.object_id = Object_Id('TABLE1')
テスト データ (以下で設定方法を説明します) を使用して、次の結果を得ました。
_year partition_number max_date
2011 1 2011-12-31 08:00:16.920
2012 2 2012-12-31 08:00:13.397
2013 3 2013-10-02 08:00:10.660
ここで重要なシステム テーブルはsys.partition_range_valuesです。1 年あたりの最大日付を返す元の集計クエリと結合する各パーティションの範囲値が得られます。
私の結果を再現するには、以下のリンクの指示に従ってください (パーティション分割されたテーブルの作成に関する投稿です)。これにより、TABLE1 が作成され、入力されます。
http://www.mssqltips.com/sqlservertip/2888/how-to-partition-an-existing-sql-server-table/
次に、投稿の冒頭でクエリを実行します。以下のリンクで提示されたクエリから適応させました。
http://www.sqlsuperfast.com/post/2011/02/22/T-SQL-Get-Partition-Details.aspx