SQL 勉強中!パート2!
まず昨日分からなかった事がちょっとだけ分かったので。
where / group by / order by がどういう順番で処理されるのか。と。
条件の評価順位
where,group by,having,order byがどのような順番で
処理されているのかを覚えておくといい。
where → group by → having → order by
where句で条件が絞られ、group byでグループ化される。
グループ化されたものをhavingの条件で絞りorder byで
並び替えて表示する。
それはいいとして。
MySQL のバージョン 3.23.58 を使ってるんですけどね。
MySQL Manual | 3.6.4 特定のフィールドのグループごとの最大値が格納されているレコード
そうそう。こういう事がやりたかったわけですよ。
グループ分けして、そのグループの中で最大値を持ってるレコードを取得する。
id が "je-pu-pu" のレコードを thread でグループ分けして、同じ thread の中で time の値が最大のものを time が大きい順に並べ替えて取得する・・・わけわからん。
| id | thread | time | subject |
|---|---|---|---|
| je-pu-pu | 0 | 2000-01-01 00:00:00 | test A |
| je-pu-pu | 1 | 2000-01-02 00:00:00 | test B |
| je-pu-pu | 2 | 2000-01-03 00:00:00 | test C |
| je-pu-pu | 0 | 2000-01-04 00:00:00 | Re: test A |
| je-pu-pu | 2 | 2000-01-05 00:00:00 | Re: test C |
| hoge | 0 | 2000-02-01 00:00:00 | test 1 |
| hoge | 1 | 2000-02-02 00:00:00 | test 2 |
こういうテーブルがあった時に
| id | thread | time | subject |
|---|---|---|---|
| je-pu-pu | 2 | 2000-01-05 00:00:00 | Re: test C |
| je-pu-pu | 0 | 2000-01-04 00:00:00 | Re: test A |
| je-pu-pu | 1 | 2000-01-02 00:00:00 | test B |
こういう結果が欲しいんだ YO !
| id | thread | time | subject |
|---|---|---|---|
| je-pu-pu | 2 | 2000-01-03 00:00:00 | test C |
| je-pu-pu | 0 | 2000-01-01 00:00:00 | test A |
| je-pu-pu | 1 | 2000-01-02 00:00:00 | test B |
これでもいい YO !
いわゆる掲示板のスレッドの「上げ」っちゅうやつを実装したいんだ YO !
はい。というわけでね。わけわかりませんけれども。
MySQL バージョン 4.1 より前のバージョンじゃサブクエリが実装されてないからめんどくさいよ!
もともと MySQL は実行速度を重視して作られたので SQL の高度な機能は実装されてないそうです。
サブクエリとかストアドプロシージャとか。
最新バージョンではそういう機能も実装されてるそうですが、
うちの TurboLinux 7 ws 君にもともと入ってるのは 3.23.58 です。
アップグレードする勇気も無く。
これからは PostgreSQL か!そうなのか!
カテゴリ
developmentトラックバック(0)
このブログ記事を参照しているブログ一覧: SQL 勉強中!パート2!
このブログ記事に対するトラックバックURL: http://je-pu-pu.jp/blog/mt-tb.cgi/71

コメントする