はじめまして。
今回、SQLである条件を絞りたいのですがその方法がいまいちピンと来ず、思考錯誤しております。
例えばですが…
テーブルにCD,DATA,YMと定義します。
条件としては、
・MAXを使わずに、YMという値の個々別の最新のもの
・同じCDは重複しない1件のみ(DISTINCT?)
・表示するのはCDとDATAのみ
・(下図で言うと)DATAは0402~0405まで(BETWEEN?)
図で表すと、
CD DATA YM
----------------
01 AAAA 0401
01 AAAA 0402
01 AAAA 0403
01 AAaa 0404
01 AAaa 0405 ←01の最新
02 BBBB 0402
02 BBBB 0403 ←02の最新
03 CCCC 0402
03 CCCC 0404
03 cccc 0405 ←03の最新
03 cccc 0406 ←これは期間外
↓
CD DATA YM
----------------
01 AAaa 0405
02 BBBB 0403
03 cccc 0405
このように抽出したいのですが、良い書き方はあるでしょうか?
No.4ベストアンサー
- 回答日時:
MAXを使えないとなると、無理に近いのではないでしょうか?MAXは使いますが、"YMという値の個々別の最新のもの"ならば可能です。
SELECT A.CD, A.DATA, A.YM
FROM テーブル A, (
SELECT BB.CD, MAX(BB.YM) AS M_YM
FROM テーブル BB
WHERE BB.YM BETWEEN 0402 AND 0405
GROUP BY BB.CD ) B
WHERE A.CD = B.CD
AND A.YM = B.M_YM
で出ますが。。。やっぱりMAX使用不可では難しいものがあるかと思いますよ。
そうですね、やっぱりこの形がベストのようです。
ほかの方法を知っている方がいたらと思いましたので、質問してみました。
基本の通り、これでやることにします。
ありがとうございました。
No.3
- 回答日時:
なぜMAXを使わないのですか?
この回答への補足
実際にはかなりの数の列があるもので、さらに条件が入ったりしますし、GROUP BYをなるべく省略したかったのです。
わざわざすいませんです。
No.2
- 回答日時:
バージョンやエディションにもよりますが、分析関数が使えるなら..
select cd,data
from
(select
x.*,
row_number() over(partition by cd order by ym desc) as R
where ym between '0402' and '0405')
where R=1
;
でも、”maxを使わずに”という理不尽な条件なので、
分析関数の使用が適切かどうかは知りません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
select insertで複数テーブルか...
-
SELECTの結果で同一行を複数回...
-
固定値を含む結合と複数テーブ...
-
副問い合わせのinsert文
-
oracleの分割delete
-
複数テーブルのMAX値の行データ...
-
select文でフリーズします。
-
SET句内で複数の条件を指定して...
-
SQL GROUPで件数の一番多いレコ...
-
Oracleでの文字列連結サイズの上限
-
実績累計の求め方と意味を教え...
-
最新の日付とその金額をクエリ...
-
レコードが存在しなかった場合
-
Access 文字+年ごとの自動採番
-
キーが同じを複数行を1行にま...
-
Date型にNULLをセットしたい V...
-
Accessで別テーブルの値をフォ...
-
SELECTで1件のみ取得するには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
GROUP BYを行った後に結合した...
-
select insertで複数テーブルか...
-
select句副問い合わせ 値の個...
-
SELECTの結果で同一行を複数回...
-
固定値を含む結合と複数テーブ...
-
MERGE文を単体テーブルに対して...
-
外部結合とor条件混在の記述方法
-
他のテーブルを参照した値はupd...
-
SET句内で複数の条件を指定して...
-
複数テーブルのMAX値の行データ...
-
SQLの書き方(チェックボックス)
-
SQL GROUPで件数の一番多いレコ...
-
unionの結果は集計はできないで...
-
oracleの分割delete
-
unionでマージした副問合せを結合
-
集計後の数値が倍になる
-
COUNTの取得方法(?)について...
-
updateの一括実行
-
サブクエリ同士をLEFT JOIN
-
DELETE 文とEXISTSの使い方につ...
おすすめ情報