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

解決済みの質問

SQLで、指定日に一番近いレコードだけ抽出

Linuxサーバーで、MySQLを使っています。


商品テーブルの中で、
同じ商品のレコードが複数あります。
(例です。本来ならそんなつくりのテーブルは作らないです。)

その多数のレコード中に、日付項目があります。

そこから、
1)商品毎に、2)指定日に、3)一番近い過去未来の日の、4)レコードだけを抽出するには、
どのようなSQL文を書けばよいでしょうか?


1.過去に複数ある日付の中から、指定日に、一番近いレコード。
2.未来に複数ある日付の中から、指定日に、一番近いレコード。
3.同一商品レコードは、複数抽出されない。

投稿日時 - 2015-07-08 19:20:53

QNo.9008602

困ってます

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

【お詫び】質問文を正しく理解していませんでした。回答は撤回します。

投稿日時 - 2015-07-08 20:45:40

ANo.2

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

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

-広告-
-広告-

回答(3)

ANo.3

【再回答】

SELECT Test.ID, MAXLIST.Goods_ID, MAXLIST.MAXDAY
FROM
[SELECT Test.Goods_ID, MAX(Test.StockingDay) AS MAXDAY
  FROM Test
  GROUP BY Test.Goods_ID
  ORDER BY est.Goods_ID] AS MAXLIST
INNER JOIN Test ON
  (MAXLIST.Goods_ID = Test.Goods_ID) AND (MAXLIST.MAXDAY = Test.StockingDay);


・商品毎にMAX日を求める。
・その集合の商品とMAX日に合致するレコードをジョインする。

WHERE節は省いていますが、実際には必要です。

投稿日時 - 2015-07-08 21:15:38

お礼

ご回答ありがとうございます。

再度のSQL文のご提示、大変たすかります。
何度も、お手数をおかけして申し訳ございません。

再度、いただいたSQLでテストしてみます。

ありがとうございました。

投稿日時 - 2015-07-09 08:25:22

ANo.1

>指定日に一番近いレコードだけ抽出したい
 ↓
>WHERE 節で指定した条件に合致したレコードを
>指定した列降順に並べて
>上位1件のみを抽出したい

と、要は、やりたい事をSQL文的に考えれば解決かと思いますよ。

【上位1件のみを抽出】

SELECT * FROM `SampleTable` ORDER BY `LastUpdate` LIMIT 10;

【添付図のSQL文】

SELECT TOP 1 *
FROM Test
WHERE (((Test.StockingDay)<#7/1/2015#))
ORDER BY Test.StockingDay DESC;

※MySQLはノートブックでしか動作しないので止むを得ずAccessで検証したが、まあ、Top句かLimit句かの差異です。

投稿日時 - 2015-07-08 20:35:13

お礼

ご回答ありがとうございます。
また、大変お手数をおかけし、申し訳ございません。

でも、とてもわかりやすい文面と説明で、
大変助かります。

実際に、プログラムに組み込んでテストしてみます。

投稿日時 - 2015-07-08 20:44:46

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-