
テーブルには複数の主キーがあり、そのうちの3つの主キーを元に
最も古い日付の情報を取得したいです。
同じデータが複数あるので、副問い合わせ(=)でエラーになると思ったのですが
エラーにならずにすべてのデータが取得されてしまいます。
テーブル
id name sex date1
1 'A' '男' 20120101
1 'A' '男' 20120101
2 'A' '女' 20120102
select * from table where date1 = (select min(date1) from table where id = 1 and name = 'A' and sex='男');
下記のような情報を取得するには、SQLとして間違えておりますでしょうか。
↓
id name sex date1
1 'A' '男' 20120101
1 'A' '男' 20120101
お分かりの方、ご教授頂けませんでしょうか。
以上、よろしくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
行を一意に識別できる unique かつ not null な属性群が主キーですから,
> id name sex date1
> 1 'A' '男' 20120101
> 1 'A' '男' 20120101
と,同じ内容の行が複数存在しているというのが事実であるなら,それは質問者が主キーだと思い込んでいるけれど主キー設定されていないということを示しています。
となると,失礼ながら,質問文に挙げられたデータ例の真偽も少々訝しく感じられてきてしまいます。確認のため差し支えなければ,次の3つのSQLをそれぞれ実行して表示された結果を,そのままCopy&Pasteで提示していただけるとありがたいです。
(1) select * from table;
(2) select min(date1) from table where id = 1 and name = 'A' and sex='男';
(3) select * from table where date1 = (select min(date1) from table where id = 1 and name = 'A' and sex='男');
No.2
- 回答日時:
あえて触れていなかったのですが、date1 は日付(date)型?
どっかのcast(to_char,to_date)で失敗してませんか?
あと、ないとは思いますが、インデックスがおかしいとか。
例と同じ構造の別テーブルを作っていろいろ試してみてはいかがでしょうか?
No.1
- 回答日時:
副問い合わせの部分は、min関数ですから、項目(date1)の最小値'20120101'が取得されます。
親の問い合わせは、date1が、副問い合わせの結果のものをとってきているのですから、複数業出るのは正常です。
メッセージありがとうございます。
2件の情報を取得するには、下記のSQL自体は問題ないと言う事ですよね。
SELECT * FROM TABLE WHERE date1 IN(SELECT min(date1) FROM TABLE WHERE id=1 and name='A' and sex='男');
3件の情報すべて取得した理由は不明ですが。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DB2でREPLACEによる文字列の置換
-
Oracle SQLにて固定長でデータ...
-
WITH句で複数テーブルを定義す...
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Oracle 2つのDate型の値の差を...
-
Accessでテーブル名やクエリ名...
-
FROM の中で CASE を使えるでし...
-
テーブルの存在チェックについて
-
Accessクエリーで両方のテーブ...
-
スティックパリティの役割
-
ACCESSで400以上のフィールドが...
-
ACCESSのクエリで集計で、先頭...
-
Excel→Accessへ貼り付けがおかしい
-
【Access】フォームで自動計算...
-
エクセルグラフの凡例スペース
-
AccessのクエリをExc...
-
Accessでコードを入れると名前...
-
Accessのクエリでデータの入力...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
DB2でREPLACEによる文字列の置換
-
ROWNUMについて
-
ある値以上の空き番の最小値を...
-
ORACLEで一番最初の結果だけを...
-
sqlplusで日本語入力
-
group by でselect
-
Oracle SQLにて固定長でデータ...
-
抽出結果を1件ずつ次の抽出条件...
-
UPDATE文でこのような更...
-
同行内の最大値
-
SQL文で教えてください
-
WITH句で複数テーブルを定義す...
-
SQL文の書き方
-
PL/SQL 複数件同じ値で更新す...
-
時間の重複を加味した連続時間S...
-
VBAのRows.Selectについて
-
Access フィールドに入力した数...
-
SQL文についての質問
-
最大値の抽出
おすすめ情報