みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

group byで指定したカラム以外のカラムの値を取得したい

t_meisaiは以下の定義で調味料の使用履歴を記録しています。
idint4uniqueな値
date timestampyy/mm/dd
type int41 or 2 or 3
orderint4純粋な順番

typeには塩、砂糖のように固形のものは1、酢、醤油のように液状のものは2、それ以外は3が入ります。
orderはdate毎に使った順番が記録されていきます。

date || type のgroupごとの一番最初に使ったものだけ抽出したのが下のSQLです。
select date || type as key, min(order) from t_meisai group by key

上記の条件に当てはまるレコードのidを抽出したいのですがどうしたらよいのでしょうか?

投稿日時 - 2005-04-07 11:07:30

QNo.1316606

すぐに回答ほしいです

質問者が選んだベストアンサー

>クエリを実行したまま処理が戻りません。

というか、遅いんでしょう(^^;;;


>下のものはgroup by keyのkeyがないのでできませんでした。

うーん、「できませんでした」って書くより、group by句を直したほうが早いですよね?

select id, minorder from t_meisai t1,
(select date, type, min(order) as minorder from t_meisai group by date, type) t2
where t1.date = t2.date and t1.type = t2.type

投稿日時 - 2005-04-07 17:47:12

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

min(order)が不要だったらこんなので。

select id from t_meisai t1
where exists(
select date || type as key, min(order) from t_meisai t2 group by key
having key = (t1.date || t1.type) )


min(order)も必要ならこんなんで

select id, minorder from t_meisai t1,
(select date, type, min(order) as minorder from t_meisai group by key) t2
where t1.date = t2.date and t1.type = t2.type

投稿日時 - 2005-04-07 14:02:59

補足

ご回答ありがとうございます。
実は両方ともうまくいきませんでした。

上のものはhaving句のkeyが無効と言われ
having key > having (t2.date || t2.type)にしましたが
クエリを実行したまま処理が戻りません。

下のものはgroup by keyのkeyがないのでできませんでした。

投稿日時 - 2005-04-07 16:41:10

あなたにオススメの質問