0

特定のフィールドの年に基づいてパーティション分割されたパーティション テーブルを作成しました

e.g. partition 1 - Year 2011 |
     partition 2 - Year 2012 |
     partition 3 - Year 2013

各パーティションの最大日付を表示するにはどうすればよいですか

e.g. partition 1 - 2011/12/15 |
     partition 2 - 2012/12/25 |
     partition 3 - 2013/12/16
4

3 に答える 3

1

テーブルの分割に使用したフィールドで、年ごとにレコードをグループ化するだけです。より具体的には、これを使用できます:

select year(my_date_field), max(my_date_field) 
from my_partitioned_table 
group by year(my_date_field)
order by year(my_date_field)

上記の順序は必須ではありませんが、適切に並べられた結果セットが得られます。

于 2013-10-02T18:44:33.710 に答える
0

関数を使用max()します ()。

Select max(y1) y1, max(y2) y2, max(y3) y3
From t
于 2013-10-02T18:41:15.117 に答える
0

もう一度試してみましょう。今、私は以下のこのクエリがうまくいくと思います:

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

于 2013-10-03T11:15:56.617 に答える