テーブルには複数の主キーがあり、そのうちの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で質問しましょう!
似たような質問が見つかりました
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- MySQL MYSQL エラー 2 2022/10/18 11:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
抽出結果を1件ずつ次の抽出条件...
-
ROWNUMについて
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
Oracle 2つのDate型の値の差を...
-
作番ってどういう意味でしょうか?
-
Accessでテーブル名やクエリ名...
-
ACCESSのクエリで集計で、先頭...
-
ACCESSに同時アクセス(編集)を...
-
IT用語について質問です。 以前...
-
Access IF文でテーブルに存在し...
-
Accessでコードを入れると名前...
-
Access テキスト型に対する指定...
-
「直需」の意味を教えてください
-
Vbaでアクセスからエクセルにリ...
-
ACCESSでの改行コード
-
Accessのリンクテーブルのパス...
-
SQLでの変数の扱いについて
-
ACCESSで表が作りたく、そのた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORACLEで一番最初の結果だけを...
-
Oracleのビュー作成時に「指定...
-
Oracle SQLにて固定長でデータ...
-
ROWNUMについて
-
DB2でREPLACEによる文字列の置換
-
ある値以上の空き番の最小値を...
-
distinct で抽出したレコード件数
-
WITH句で複数テーブルを定義す...
-
抽出結果を1件ずつ次の抽出条件...
-
sqlplusで日本語入力
-
VBAのRows.Selectについて
-
group by でselect
-
時間の重複を加味した連続時間S...
-
PL/SQL 複数件同じ値で更新す...
-
重複
-
動的SQLでのDECODE
-
sqlの条件文に関して
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
おすすめ情報