1

SQL SERVER 2005 データベースに、RUNNING_COLA_IS_AFRICA というテーブルがあるとします。

このテーブルには、RUNNING_ID と呼ばれる一意の varchar(50) フィールドがあります。

このテーブルには 100 万件のレコードがあります。

RUNNING_ID ASC でソートし、50 の範囲を指定して、次のような出力を生成するクエリを作成したいと思います。

RUNNING_ID_START RUNNING_ID_END
000000           000103
000104           000767
000892           001492
001576           011222
012345           013579

この意味は:

a) The number of the records between 000000 and 000103 is 50;
b) The number of the records between 000104 and 000767 is 50;
c) The number of the records between 000892 and 001492 is 50;
d) The number of the records between 001576 and 011222 is 50;
e) The number of the records between 012345 and 013579 is <= 50.

もちろん、min(RUNNING_ID) = 000000 および max(RUNNING_ID) = 013579 は、RUNNING_ID ASC によって順序付けられているためです。

SQL SERVER 2005 でこれを実現するにはどうすればよいですか?

よろしくお願いいたします。

4

1 に答える 1

2
WITH
  sequenced
AS
(
  SELECT
    ROW_NUMBER() OVER (ORDER BY running_id) - 1 AS sequence_id,
    *
  FROM
    RUNNING_COLA_IS_AFRICA
)
SELECT
  sequence_id / 50     AS group_id,
  MIN(running_id)      AS running_id_first,
  MAX(running_id)      AS running_id_last,
  COUNT(*)             AS size_of_group
FROM
  sequenced
GROUP BY
  sequence_id / 50
于 2012-10-19T15:44:04.090 に答える