• 締切済み
  • すぐに回答を!

連番のMin, Maxを取得したい

連番の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は同じ部署コードです) よろしくお願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数665
  • ありがとう数3

みんなの回答

  • 回答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

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • SQLSERVER 連番更新について

    <環境>SQLSERVER 一時ワークテーブルのフィールドに指定した番号以降の連番を更新したいのですが、 クエリーで更新する方法はありますか? 例) <更新前のテーブル> コード 名前  連番  001  AAA  null 002  BBB  null 003  CCC  null <更新後のテーブル> 15以降の連番を更新する コード 名前  連番  001  AAA   15 002  BBB   16 003  CCC   17

  • 条件付MAX値取得について

    ACCESS2000を使用しています。 このたび、グループごとに自動的に連番を採番する プログラムをVBAで組みたいと思っています。 そこで、下記のように作りました。 VBA初心者のためあまりつくりがよくないかもしれませんが、やりたかったことは、フォームと一致してる会社コードの中で会社テーブルの会社連番の最大値から1を足してをF会社連番に入れなさいって意味です。 このVBAを会社名を入力した後に実行するようにしています。 ところが、このVBAだとただしくMAX値を取得できず、 NULL値を取ってきてしまい、0が入ってしまいます。 長文になりましたが、数時間迷っているので、 手助けしていただけないでしょうか。 [会社テーブル] 会社コード・・・グループ化したいフィールド 会社連番・・・連番したいフィールド 会社名・・・会社の名前 [会社フォーム] F会社コード・・・会社コードと連結 F会社連番・・・会社連番と連結 F会社名・・・会社の名前と連結 Dim aa As Variant aa = DMax("会社連番", "会社テーブル", "会社コード = 'Form_会社フォーム!F会社コード'") If IsNull(aa) Then Me!F会社連番 = 0 Else Me!F会社連番 = aa + 1 End If

  • 複数の条件

    名前 G番号 G連番 数量  チーム AAA   1    1    80    1 AAA   2    1    99    1 AAA   3    1    98    1 AAA   3    2    60    1 AAA   4    1    99    1 AAA   4    2    97    1 BBB   1    1    22    2 BBB   2    1    19    2 BBB   2    2    99    2 BBB   3    1    50    2 CCC   1    1    99    1 CCC   2    1    99    1 DDD   1    1    99    1 DDD   2    1    99    1 DDD   1    1    99    2 DDD   2    1    99    2 以上のようなテーブル T_Aがあるとして、以下のような優先順位での抽出条件を考慮した場合のSQL記述方法が分かりません。教えていただけますでしょうか。 名前  "AAA" OR "DDD" ↓ チーム "1" ↓ G番号 "最大"のもの ↓ G連番 "最大"のもの 欲しいレコード 名前 G番号 G連番 数量  チーム AAA   4    2    97    1 DDD   2    1    99    1 以下のようにやってみましたが駄目でした。 SELECT 名前,G番号,G連番,数量,チーム FROM T_A WHERE 名前='AAA' OR 名前='DDD' AND チーム='1' AND (G番号=(SELECT MAX(G番号) FROM T_A)) AND (G連番=(SELECT MAX(G連番) FROM T_A)) 宜しく御願いいたします。

  • 回答No.1
  • root139
  • ベストアンサー率60% (488/809)

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

  • 10営業日前の日付を取得したい(修正)

    ※連投すみません。削除も修正もできなかったので連投になってしまいました。 一番重要な説明をコピペミスしてしまいました。 明日になれば削除できるようなので古い方は明日削除致しますm(__)m ---ここから--- 今日は9/24という想定で各部署の10営業日前の日付を取得したいのですが良い方法が思いつきません。 (ここ↓を参考にしたらできそうな気がしましたが私の頭では無理でした。。。) http://okwave.jp/qa/q6677209.html 【休日テーブル】 部署コード, 休日 ----------------- busyo1,   9/13 busyo1,   9/14 busyo1,   9/20 busyo1,   9/21 busyo1,   9/23 busyo2,   9/7 busyo2,   9/14 busyo2,   9/21 busyo3,   9/20 【結果】(各部署の10営業日前の日付) 部署コード, 日付 ----------------- busyo1,   9/9 busyo2,   9/12 busyo3,   9/13 このような「発想の転換」が必要な感じのSQLが本当に苦手です。 全然思いつかずに今日も半日を浪費してしまいました。 何かコツのようなものがあるのでしょうか。 お礼は明日の夜になってしまいますが何卒よろしくお願いします。

  • 日付の最大値レコードを取得する方法について

    お世話になります。 SQLで日付の最大値を取得する方法です。 テーブルのデータ内容は以下のようになっています。 | 社員番号 | 社員名 | 日付 | 順序 | +---------+-------+-----------+-----+ | 100 | AAA | 2011/05/01 | 2 |   ← このレコードを取得したい +---------+-------+-----------+-----+ | 100 | AAA | 2011/05/01 | 1 | +---------+-------+-----------+-----+ | 100 | AAA | 2011/04/01 | 1 | +---------+-------+-----------+-----+ | 200 | BBB | 2011/04/01 | 2 |   ← このレコードを取得したい +---------+-------+-----------+-----+ | 200 | BBB | 2011/04/01 | 1 | +---------+-------+-----------+-----+ 取得したいレコードは、 社員ごとの最大日付の最大順序をもつレコードです。 (上記の1行目と4行目のレコードを取得したい) この場合、 下記のようなSQLを考えます。 --------------------------------- SELECT 社員番号, 社員名, 日付 FROM テーブル名 WHERE 社員番号 = 'xxx' AND 日付 = (SELECT MAX(日付) FROM テーブル名 ) AND 順序 = (SELECT MAX(順序) FROM テーブル名 ) ---------------------------------- 但し、上記の場合、 社員ごとに最大値レコードが取得できません。 どなたかレコード取得方法について 教えていただけないでしょうか? よろしくお願いいたします。

  • アクセスの連番について

    アクセスでテーブルのkanri_Noという項目に管理番号を振りたいと思っています。 他のテーブルに後でインサートするので、そのテーブルのKanri_NOの最大値をKanri_Maxとして引いてきてそのKanri_Max+連番という風に振りたいのですが、どうSQLを入れればいいのか分かりません。 Kanri_Maxが4000だったら、4001、4002、4003・・・、Kanri_Maxが5000だったら5001、5002、5003とKanri_Noの項目に連番を振りたいのです。 連番を振る前のKanri_Noは空白です。 初心者で申し訳ないのですが教えてください。

  • 集合関数(MIN)で取得した値をキーする場合

    SQLの構文でご教授願います。 テーブル1(顧客マスタ) 顧客番号  住所コード 1        01 1        02 1        03 テーブル2(住所マスタ) 住所コード 住所 01       ううう 02       いいい 03       あああ 上記2テーブルを連結し、 「顧客番号」と「同一顧客内の最小の住所コード」と「その住所コードの住所」を取得したいのですが、、、 SELECT 顧客マスタ.顧客番号,MIN(住所マスタ.住所コード) AS 住所コード,MIN(住所マスタ.住所) AS 住所 FROM 顧客マスタ INNER JOIN 住所マスタ ON 顧客マスタ.住所コード = 住所マスタ.住所コード GROUP BY 顧客マスタ.顧客番号; と発行すると、 顧客番号  住所コード 住所 1        01      あああ となってしまいます。 これを、 顧客番号  住所コード 住所 1        01      ううう のように取得したいのですが、 どのようなSQL文を書けばよいのでしょうか。 ちなみに、VIEWは使いたくなく、複雑なSQL文でもかまわないので、 一度で持ってこれるような構文はないでしょうか? 宜しくお願いいたします。

  • Accessでデータに連番をつけたい

    Accessで、ひとつの親番号に対していくつかの子番号 をひもつけて管理したいと考えています。 例: 親番号 AAA BBB CCC 子番号 001、002、003 →AAA-001、  AAA-002・・・  BBB-001、  BBB-002・・・ というふうに管理する。 そこで、データの新規登録時に親番号を取得後、フォーム上でボタンを押すと自動的に「親-子」という形になるようにしたいのですが、どうすればよいでしょうか? イベントプロシージャがなかなかうまく行かず・・。 お助けください!

  • データ取得

    name*****key1****key2****date ------------------------------- AAA*******1*******1*****2003/01 BBB*******2*******2*****2002/12 AAA*******1*******2*****2003/01 BBB*******1*******2*****2002/11 BBB*******2*******2*****2002/11 AAA*******2*******2*****2003/01 AAA*******2*******2*****2002/12 ------------------------------- (※全てのフィールドが同じ情報のレコードはない) ****は意味はありません。表を見やすくするために書いただけです。 上記のテーブルから下記のデータを取得したいと 考えています。 AAA*****2002/12*****1 AAA*****2003/01*****3 BBB*****2002/11*****2 BBB*****2002/12*****1 name列とdate列の重複しないレコードの件数を取得したいのですが どのようなSQLを記述すればよろしいでしょうか?

  • SQL文がわからない

    在庫テーブル・入庫テーブル・出庫テーブルがあります。 指定期間内の入庫テーブル・出庫テーブルの数量と在庫テーブルを結合させたいが、どうすればいいでしょうか? 2日ほど悩みましたがどうしても分かりませんでした。 よろしくお願いします <在庫テーブル> コード 個数 aaa   10 bbb   10 ccc   10 <入庫テーブル> コード 個数 日付 aaa   1  1/1 aaa   1  1/2 bbb   1  1/2 aaa   1  1/3 aaa   1  1/4 bbb   1  1/4 ccc   1  1/5 <出庫テーブル> コード 個数 日付 bbb   2  1/2 aaa   2  1/3 bbb   2  1/4 ccc   2  1/4 aaa   2  1/5 <結果(1/2~1/3)> コード 個数 入庫 出庫 aaa   10   2   2 bbb   10   1   4 ccc   10   0   2

    • ベストアンサー
    • MySQL
  • SQLで件数分SELECT結果を取得するには

    SQLSERVERのSQLで以下の【期待する結果】を取得する方法はありますか? SELECT NAME,COUNT FROM CLASSROOM 【結果】 AAA,2 BBB,1 CCC,3 【期待する結果】 AAA AAA BBB CCC CCC CCC よろしくお願いします。

  • SQLの集計について教えてください。

    環境はoracle9iです。 ■テーブルの構成 |年度|月|部署コード|商品コード|金額| ■テーブルの内容 |2010|01|AAA|001|1000| |2010|02|AAA|001|2000| |2010|01|AAA|001|3000| |2010|01|AAA|002|3000| |2010|02|BBB|003|4000| |2010|01|CCC|001|5000| |2010|03|CCC|001|6000| 上記のようなテーブルがあり、 これを年度,月,部署コード,商品コードでサマリした値を表示したいです。 と、ここまでなら上の4つでGROUP BYしてあげれば良いのですが、 そこに年度,部署コード,商品コードでサマリした 「累計金額」列を加える必要があります。(イメージは下記のとおりです。) ■抽出結果の構成 |年度|月|部署コード|商品コード|金額|累計金額| ■抽出結果の内容 |2010|01|AAA|001|4000|6000| |2010|02|AAA|001|2000|6000| |2010|02|BBB|003|4000|4000| |2010|01|CCC|001|5000|11000| |2010|03|CCC|001|6000|11000| GROUP BYと別の集計単位で列を作ることが可能か、 可能であればどのようなSQLを書くべきか、 というところを教えてください。

  • Accessにてテーブル追加時の連番

    Accessにて、個人ごとの販売管理をするようなメイン/サブフォーム形式のフォームを作成しました。 テーブルA(メインフォーム用テーブル) ●個人CD ●氏名 ●住所  ・  ・ テーブルB(サブフォーム用テーブル) ●連番(個人CDごとに取得するよう設定) ●日付 ●個人CD ●商品CD ●個数  ・  ・ フォームにて入力する場合、連番は自動で取得するようなVBAを書いています。 追加クエリA ●日付 ●個人CD  ・  ・ ※1回の追加では、ひとつの個人CDに対して、1件分のデータ。 追加クエリAにより、テーブルBにまとめてデータを追加したい場合、 連番をどのようにして取得してよいか分かりません。 連番は、個人CDごとに振るようにしたいのですが、どのようにしたらよいでしょうか? よろしくお願いいたします。