MySQLを使っています。
同じ商品のレコードが複数あります。
その多数のレコード中に、日付項目があります。そこから、
1)指定日に、2)一番近い過去の日の1件の、3)全商品のレコード、を抽出するには、
どのようなSQL文を書けばよいでしょうか?
1.過去に複数ある日付の中から、指定日に、一番近いレコード。
レコードの例)
指定日=2015-07-01
商品ID 日付
1 2015-10-11 ・・・未来 ⇒ 抽出せず
1 2015-08-02 ・・・未来 ⇒ 抽出せず
1 2015-07-01 ・・・指定日 ⇒ 抽出せず
1 2015-07-01 ・・・指定日 ⇒ 抽出せず
1 2014-01-01 ・・・過去 ⇒ 抽出せず
1 2015-06-03 ・・・過去 ⇒ 抽出したい★★
2 2015-10-11 ・・・未来 ⇒ 抽出せず
2 2015-08-02 ・・・未来 ⇒ 抽出せず
2 2015-07-01 ・・・指定日 ⇒ 抽出せず
2 2014-01-01 ・・・過去 ⇒ 抽出せず
2 2015-06-03 ・・・過去 ⇒ 抽出したい ★★
No.1ベストアンサー
- 回答日時:
これってほぼ前回の応用では?
考慮しなくてはいけないのは、該当レコードが複数ある場合全て表示するのか、
それともどれか1つだけ抽出するのか、抽出する場合はどういったロジックをつかうのかです。
また過去データが1つもないものは表示しなくてよいのか、nullでも表示したいのかを
きめないといけません。
単純に合致するデータをすべて表示し、過去データがない場合は表示しないのであれば
こんな感じ
//データ
create table goods (id int not null primary key auto_increment,pid int,d date);
insert into goods(pid,d) values(1,'2015-10-11'),(1,'2015-08-02'),(1,'2015-07-01'),(1,'2015-07-01'),(1,'2014-01-01'),(1,'2015-06-03'),(2,'2015-10-11'),(2,'2015-08-02'),(2,'2015-07-01'),(2,'2015-07-01'),(2,'2014-01-01'),(2,'2015-06-03'),(3,'2014-01-01'),(3,'2014-01-02'),(3,'2014-01-02'),(4,'2015-07-10'),(4,'2015-07-11');
//抽出
select * from goods
where (pid,d) in (select pid,max(d)from goods where d < '2015-07-01' group by pid)
注意:pid=3は合致するレコードが2つあります
ありがとうございます。
前回のSQLを元に、試行錯誤したのですが、
結局、技術力不足で、実現できませんでした。
上記、回答いただいたので、完璧です。
全商品や、ある商品の過去データがなければ、
それは、抽出されなくてよいです。
=抽出結果が、0件でもよい。
PID3は、過去の最大日付が同じなので、
複数抽出されてもよいです。
色々考慮していただいて、大変申し訳ありません。
大変たすかります、ありがとうございます。
もっと、私が、条件を詳しく書かないといけなと
つくづく実感しました。
本当にありがとうございます。
今から、実際に、このSQLでやってみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Oracle 列1と列2の関係性で列3の条件に一致するレコードを抽出したい 1 2022/04/13 07:46
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- 環境・エネルギー資源 培養魚肉の製造原価が3000分の1のコストで作れるという会社について 2 2023/01/26 19:47
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Excel(エクセル) エクセルで重複データから重複を削除して指定の列に抽出したい 11 2022/05/11 11:26
- Excel(エクセル) エクセルのデータの抽出について 3 2022/09/15 23:56
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
limit offset はupdate文には使...
-
SQLでレコード間の値の交換
-
SQLで、過去で一番大きい日付の...
-
SELECT INTOで一度に複数の変数...
-
【SQL】他テーブルに含まれる値...
-
sqlに記述できない文字
-
timestampのデータはどのように...
-
既存データをINSERT文にして出...
-
UPDATEで既存のレコードに文字...
-
フラグをたてるってどういうこ...
-
Access 別のDBに対してDlookup...
-
トランザクションテーブルの設...
-
Accessで今日から5日後
-
truncate tableを使って複数の...
-
SELECTした結果に行番号を求めたい
-
ExcelのMatch関数のようなもの...
-
エラーを起こす方法
-
データベース ユーザの「このユ...
-
csvデータ不要列の削除をbatフ...
-
JDBCを使ってdate型へのINSERT...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
AccessVBAについて テーブルの...
-
SQLで、過去で一番大きい日付の...
-
SQLでレコード間の値の交換
-
1つのSQLで2段階の抽出を行い...
-
mysqlのindexとprimary keyにつ...
-
【SQL】項目に紐づいている情報...
-
複数の値を1レコードに表示した...
-
limit offset はupdate文には使...
-
こちらのテーブルにあってこち...
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
スキーマ
-
sqlに記述できない文字
-
オラクルのUPDATEで複数テーブル
-
Accessで今日から5日後
-
timestampのデータはどのように...
-
UPDATEで既存のレコードに文字...
-
pandasでsqlite3にテーブル作成...
-
テーブル名が可変の場合のクエ...
おすすめ情報