みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLで、過去で一番大きい日付のレコード抽出

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 ・・・過去 ⇒ 抽出したい ★★

投稿日時 - 2015-07-09 17:17:16

QNo.9009154

困ってます

質問者が選んだベストアンサー

条件が 指定日以下

抽出内容が Max(日付)

で グループ指定すればいいです。

投稿日時 - 2015-07-09 17:35:48

お礼

ありがとうございます。
うまくいきました。
お手数をおかけしました。

投稿日時 - 2015-07-09 18:08:46

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

まず、直近の日付を抽出するSQLは次のようです。

SELECT Goods_ID, MAX(StockingDay) AS 直近の日付
FROM TEST
WHERE StockingDay<#6/30/2015#
GROUP BY Goods_ID;

これが添付図のいわゆる黄色群を抽出する手がかりになります。

【黄色群も他の列はJOINで】

これは、先に回答した通りです。

【赤色群を同時に抽出するにはUNIONを使います。

SELECT ・・・ ← 黄色群を他の列も含めて抽出するSQL文
UNION
SELECT Test.ID, Test.Goods_ID, Test.StockingDay FROM TEST WHERE StockingDay>=#2015/06/30#;

投稿日時 - 2015-07-09 17:46:19

あなたにオススメの質問