- - PR -
古いものを見るには?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-08-27 08:39
みけです。
データの履歴管理しているテーブルがあります。 項目的にはIDと作成日とその他のデータがあります。 その中で、最初に作成されたデータを抽出したい場合 どのようなSQLを組めば求めることができるのでしょうか? -- 例 ID DATE DATA 11 08/25 AAAA 11 08/26 BBBB 11 08/27 CCCC 12 08/26 DDDD 12 08/27 EEEE 上記の例で、欲しいデータはAAAAとDDDDです。 始めは以下のように組めばいいかと思ったのですが、 GROUP BYとORDER BYを組み合わせることが出来なくて。。。 SELECT DATA FROM TABLE WHERE ROWNUM=1 GROUP BY ID ORDER BY DATE どのようにすれば、よろしいのでしょうか??? | ||||
|
投稿日時: 2004-08-27 08:50
SELECT SUBSTR(MIN(CONCAT(CAST(DATE AS CHAR),DATA)),11)
FROM TABLE GROUP BY ID てなとこですか。 MySQLのSQLで記述してます。 | ||||
|
投稿日時: 2004-08-27 08:56
とりあえずGROUP BYの使い方を理解されていないようですので、
こちらをご覧になれば解決できるかと思います。 http://www.atmarkit.co.jp/fnetwork/rensai/sql03/sql1.html _________________ まゆりん @ わんくま同盟 Blog る。 | ||||
|
投稿日時: 2004-08-27 08:59
なかなかアホなコード書いてますね。連結ソートを使用することもありますが、 連結したままの列を、結果セットとして返すなんて信じられません。 そんなことしたら、後工程で文字列処理が発生するし、型が失われますよ。 普通はサブクエリを使います。 select ID, (select i.DATA from TABLE as i where i.ID = o.ID and i.DATE = min(o.DATE)) as DATA from TABLE as o group by ID | ||||
|
投稿日時: 2004-08-27 09:08
まぁDBMSによっては未だサブクエリを使えないものもあるので使わずに書いたまでですが。
またもや無知が露呈してしまいましたな # また別人を装われますかな | ||||
|
投稿日時: 2004-08-27 09:11
一応MSDEで試したところ次のSQLで取得できました。(DATEは日付型でいいのかな?)
SELECT X.DATA FROM TABLE X, (SELECT ID, MIN(DATE) AS DATE FROM TABLE GROUP BY ID) Y WHERE X.ID=Y.ID AND X.DATE=Y.DATE ってな感じです。 もっとスマートな方法があると思いますが、私のレベルではこの程度です。 [追記] MySQLで同じSQL実行したらエラーになりました [ メッセージ編集済み 編集者: ぼんじぃ 編集日時 2004-08-27 09:15 ] | ||||
|
投稿日時: 2004-08-27 09:15
rownum 擬似列って事は、Oracleですよね。
SQLはRDMSによって方言があったり利用出来る関数が異なるので 何のRDMSを使っているか記述する事をお勧めします。 まず、rownum 擬似列の性質を理解する必要があります。 rownum 擬似列は、他のWhere条件句の後に評価されますが、 Group by句やOrder by句よりも先に評価されます。 よって、みけさんの手段は無効です。 また、 >その中で、最初に作成されたデータを抽出したい場合 では無く、 「その中で、最初に作成されたレコードを抽出したい場合」ですよね? 一般には、上記の性質を踏まえ下記の2通りで考えます。 1.「日付順に並べた結果」から「1件目」のデータを取得 2.「最新日付を取得した結果」から「最新日付を指定して」データを取得 つまり、どちらも副問合せを利用します。 PG、SEどちらでも基本であり、データ処理には重要な考えです。 よって以上のヒントのみにします。 がんばってケロ! | ||||
|
投稿日時: 2004-08-27 09:19
サブクエリが使えない環境について配慮した旨一言も添えられてないね。 てゆーか、MySQL っていまだにサブクエリ使えないの? トランザクションもサブクエリもサポートされたんだと思ってたけど。 まぁ、ひとりで一生恥ずかしい結果セット返しててください。 |