
連番のMin, Maxを取得したい
下記のデータが格納されたテーブルで、
部署コードのまとまりごとに、連番のMin, Maxを取得したいと
考えています。
SQLで、期待する結果を取得したいのですが、
なかなかよい案がなく、困っております。
何かよいアイデアがあれば、ご教授頂きたいと思い、質問致しました。
対象DBは、
SQLServer2008 Standard Editionです。
検索するテーブル
RENBAN BUSYO_CD
----------------------------------------
1 AAA
2 AAA
3 AAA
4 AAA
11 BBB
12 BBB
13 BBB
21 AAA
22 AAA
23 AAA
24 AAA
----------------------------------------
期待する結果
BUSYO_CD RENBAN_MIN RENBAN_MAX
--------------------------------------------------------------
AAA 1 4
BBB 11 13
AAA 21 24
--------------------------------------------------------------
※データは、あらかじめ連番(昇順)でソートされています
※連番は、部署コードが同じ間は、続き番号となっていますが、
部署コードが変わると、続き番号にならない可能性があります。
※同じ部署コードのまとまりが、複数回出てくることがあります。
(上記例でいえば、連番1~4のAAAと、21~24のAAAは同じ部署コードです)
よろしくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
SELECT BUSYO_CD,MIN(RENBAN), MAX(RENBAN) FROM (
SELECT RENBAN,BUSYO_CD,
ISNULL( (SELECT MAX(RENBAN)
FROM @BUSYO AS S2
WHERE S2.RENBAN < S1.RENBAN
AND S2.BUSYO_CD <> S1.BUSYO_CD),0) AS grp from @BUSYO as S1
) TT GROUP BY TT.grp,BUSYO_CD
ORDER BY TT.grp
No.1
- 回答日時:
RENBAN が INTEGER で主キーもしくは UNIQUE NOT NULL とすれば、下記の様なSQLで出来るかと。
(テーブル名は仮に「BUSYO」としました)
--------------------------------
SELECT B1.BUSYO_CD, B1.RENBAN AS RENBAN_MIN, B2.RENBAN AS RENBAN_MAX
FROM BUSYO B1, BUSYO B2
WHERE
NOT EXISTS (
SELECT 'x'
FROM BUSYO B3
WHERE
B1.BUSYO_CD = B3.BUSYO_CD AND
B3.RENBAN = B1.RENBAN - 1
) AND
NOT EXISTS (
SELECT 'x'
FROM BUSYO B3
WHERE
B2.BUSYO_CD = B3.BUSYO_CD AND
B3.RENBAN = B2.RENBAN + 1
) AND
B1.BUSYO_CD = B2.BUSYO_CD AND
B1.RENBAN <= B2.RENBAN AND
(
SELECT COUNT(*)
FROM BUSYO B3
WHERE
B1.BUSYO_CD = B3.BUSYO_CD AND
B3.RENBAN BETWEEN B1.RENBAN AND B2.RENBAN
) = B2.RENBAN - B1.RENBAN + 1
ORDER BY RENBAN_MIN;
--------------------------------
WHERE句は下記の様な意味になります。
・最初のNOT EXIST句はB1が同一部署の連番の先頭で有る条件
・2番目のNOT EXIST句はB2が同一部署の連番の最後で有る条件
・最後のSELECT COUNT(*)はB1 と B2 の間に同一部署だけが抜けがなく詰まっているかの条件
参考URL:http://codezine.jp/article/detail/1076?p=2
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
重複するキーから一番古い年月...
-
2つのテーブルから条件に一致...
-
VIEWでテーブルの集計結果...
-
遅延制約について
-
SQLのORDERBY句について質問です。
-
主キーの変更
-
続.ORACLEのSELECTのソートに...
-
SQL文について(片方のテーブル...
-
Accessでどのようにアプローチ...
-
Inner join と Left joinの明...
-
Accessにインポートしたら並び...
-
SI Object Browserのテーブルス...
-
ビューで引数を使いたい
-
ACCESS 一番最新の日付の金額...
-
ACCESSのSQLで、NULLかNULLでな...
-
SQL Server のデータをCSVファ...
-
Accessでレコードが更新された...
-
SELECT文でのデッドロックに対...
-
DataTableから条件を満たした行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
主キーの変更
-
update文で質問です。 下記の条...
-
ACCESS 一つのフィールドに複...
-
続.ORACLEのSELECTのソートに...
-
accessで移動平均する方法
-
行方向のデータを横に並べる
-
Accessでフィールドを比較した...
-
PLSQLの識別子エラー
-
商品コード番号を入力すると商...
-
ACCESSのデータシート形式のフ...
-
複数InnerJoin時の処理落ち回避法
-
Accessのテーブル設計について...
-
正規化・リレーションシップに...
-
Accessのコンボボックスの使い...
-
データベースの問題
-
ACCESSのコンパイルエラーについて
-
SQL結合条件
おすすめ情報