![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
連番の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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) テーブルを配列に入れて、元のテーブルの行番号を取得したい 1 2022/08/16 20:15
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- JavaScript jsonテキストデータの並び替えができるサービスを教えてください 2 2022/08/05 20:16
- JavaScript 指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードを教えてください 2 2023/04/27 17:58
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- Visual Basic(VBA) 【VBA】特定の文字で改行(次の行)に行きたい。 3 2022/04/11 17:20
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
ACCESS 一つのフィールドに複...
-
テーブル値関数経由でのデータ更新
-
主キーの変更
-
ACCESSのコンパイルエラーについて
-
行方向のデータを横に並べる
-
[Oracle] UPDATE分の副問い合わ...
-
片方だけ抽出する方法(SQL)
-
請求と入金のテーブルの作成の...
-
ACCESS 一番最新の日付の金額...
-
ACCESSのSQLで、NULLかNULLでな...
-
ACCESS2007 フォーム 「バリア...
-
2つの項目が重複するレコード...
-
SELECT文でのデッドロックに対...
-
数百万件レコードのdelete
-
非連結サブフォームのレコード...
-
Accessにインポートしたら並び...
-
[ BETWEEN ] vs [ >= AND <= ]
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
ACCESS 一つのフィールドに複...
-
商品コード番号を入力すると商...
-
行方向のデータを横に並べる
-
PLSQLの識別子エラー
-
Inner join と Left joinの明...
-
片方だけ抽出する方法(SQL)
-
SQL 2つのテーブルとSUBSTRING...
-
Accessユニオンクエリーで2つ...
-
主キーの変更
-
Accessでフィールドを比較した...
-
SQL文について(片方のテーブル...
-
続.ORACLEのSELECTのソートに...
-
場合によって条件を変えるSQL
-
請求と入金のテーブルの作成の...
-
sqlのupdate文で質問です。 テ...
-
[Oracle] UPDATE分の副問い合わ...
-
accessで移動平均する方法
おすすめ情報