- ベストアンサー
SQLで、指定日に一番近いレコードだけ抽出
Linuxサーバーで、MySQLを使っています。 商品テーブルの中で、 同じ商品のレコードが複数あります。 (例です。本来ならそんなつくりのテーブルは作らないです。) その多数のレコード中に、日付項目があります。 そこから、 1)商品毎に、2)指定日に、3)一番近い過去未来の日の、4)レコードだけを抽出するには、 どのようなSQL文を書けばよいでしょうか? 1.過去に複数ある日付の中から、指定日に、一番近いレコード。 2.未来に複数ある日付の中から、指定日に、一番近いレコード。 3.同一商品レコードは、複数抽出されない。
- longucumber0519
- お礼率64% (34/53)
- MySQL
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
【お詫び】質問文を正しく理解していませんでした。回答は撤回します。
その他の回答 (2)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【再回答】 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節は省いていますが、実際には必要です。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
>指定日に一番近いレコードだけ抽出したい ↓ >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句かの差異です。
お礼
ご回答ありがとうございます。 また、大変お手数をおかけし、申し訳ございません。 でも、とてもわかりやすい文面と説明で、 大変助かります。 実際に、プログラムに組み込んでテストしてみます。
関連するQ&A
- SQLで、指定日条件のSQL文
MySQLを使っています。 商品テーブルの中で、 同じ商品のレコードが複数あります。 その多数のレコード中に、日付項目があります。 そこから、 1)商品IDで重複せずに、2)指定日に、3)一番近い過去の日、4)指定日を含めて、複数ある未来の全レコード、を抽出するには、 どのようなSQL文を書けばよいでしょうか? 商品でユニークになるように、 1.過去に複数ある日付の中から、指定日に、一番近いレコード。 2.未来に複数ある日付の中の、全ての未来の、レコード。 3.同一商品レコードは、複数抽出されない。
- ベストアンサー
- SQL Server
- 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 ・・・過去 ⇒ 抽出したい ★★
- ベストアンサー
- MySQL
- SQLで、指定日に日付条件で抽出方法
商品テーブルの中で、 同じ商品のレコードが複数あります。 その多数のレコード中に、日付項目があります。 そこから、 1)指定日に、2)一番近い過去の日の1件、3)指定日を含めて、複数ある指定日及び未来の全レコード、を抽出するには、 どのようなSQL文を書けばよいでしょうか? 1.過去に複数ある日付の中から、指定日に、一番近いレコード。 2.指定日と未来に複数ある日付の中の、全ての未来の、レコード。 レコードの例) 指定日=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 2015-07-01 ・・・指定日 ⇒ 抽出したい 2 2014-01-01 ・・・過去 ⇒ 抽出しない★ 2 2015-06-03 ・・・過去 ⇒ 抽出したい
- ベストアンサー
- MySQL
- MySQLで、本日に一番近い日のレコード
Linuxサーバーで、MySQLを使っています。 ユーザーの付属テーブルの中で、 同じユーザーのレコードが複数あります。 その多数のレコード中に、日付項目があります。 そこから、ユーザー毎に、本日に一番近い過去未来の日のレコードだけを抽出するには、 どのようなSQL文を書けばよいでしょうか? 抽出結果は、下記のようになるように。 ユーザーA、本日に一番近い日付、・・・・ ユーザーB、本日に一番近い日付、・・・・ ユーザーC、本日に一番近い日付、・・・・ ※同一ユーザーは、複数抽出されない。=ユーザーは、ユニークになる抽出結果。
- ベストアンサー
- MySQL
- 1つのSQLで2段階の抽出を行いたい
恐らくそれほど複雑なSQLではないと思いますが、中々SQLが作成できず困っています。 回答いただければ嬉しいです。 以下のテーブルがあったと仮定します。 テーブル名: 売上げ明細 カラム: ・商品ID … 売上げ明細なので一意ではありません ・単価 … 同じ商品IDでも、レコードによって単価は異なります ・数量 … 1~5の整数のみとします 実際のデータは以下の通りです。 商品ID,単価,数量 1001,50,2 1001,60,5 1002,90,3 1003,60,5 1003,80,4 1003,90,1 1004,60,3 上記データを以下の通り抽出するには、どのようなSQLを組めばいいでしょうか? 1.まず各商品IDの中から単価が最大のレコードだけを取り出す 商品ID,単価,数量 1001,60,5 1002,90,3 1003,90,1 1004,60,3 2.次に数量でgroup by して、件数をカウントする 数量,件数 1,1 3,2 5,1 1つのSQL文で2の結果が得られれば、途中の抽出条件は特に問いません。 ちなみにMySQL5を使っています。 よろしくお願いします。
- ベストアンサー
- MySQL
- SQLでレコードの抽出
MySQLです。 商品IDと販売先、管理番号が、判明しているとき、 最大商品IDとそのレコードを取得するには、 どのようなSQLを書けば、よろしいでしょうか? select *, ? from SYOUHIN WHERE ???? テーブル例) ↓ユニーク 商品ID 販売先 管理番号 販売日 1 A社 1 2015-07-10 2 A社 2 2015-07-12 3 B社 1 2015-06-30 4 B社 2 2015-07-06 5 C社 1 2015-04-21
- ベストアンサー
- MySQL
- 最新日のレコードと合計の抽出
作業テーブル(作業者ID、作業日、作業時間)から、作業者ID毎に指定した作業日のレコード、および作業日を含む月の合計を抽出するSQLを考えております。 DBへのアクセス回数を減らすようにとの事で、1つのSQL文での抽出を検討しておりますが、いまいち上手くいかない状況です。 アドバイスを頂けると非常に助かります。 よろしくお願い致します。
- ベストアンサー
- PostgreSQL
- SQLで日付
MySQLです。JAVAです。 下記に該当するレコード項目全てを抽出するには、 どのようなSQLを書けばよいでしょうか? 指定日 sitei_date = 2015-07-14 sampleテーブル -------------------- ID name date -------------------- 1 商品A 2015-07-07 1 商品A 2015-07-13 1 商品A 2015-07-14 ・・・ これを抽出したい 1 商品A 2015-09-11 2 商品B 2015-09-10 2 商品B 2015-07-15 2 商品B 2015-07-13 3 商品C 2015-07-07 3 商品C 2015-07-11
- ベストアンサー
- MySQL
- レコードの抽出
N1,N2,N3,N4,N5 1,3,17,20,25 2,11,12,21,30 1,8 10 24 30 11,12,14,20,31 8,9,15,21,25 2,11,16,24,29 2,11,12,13,28 8,19,21,23,30 17,18,19,20,30 上記のようなテーブルの中から、 ”11以上20以下の数値が3つ以上含まれているレコード”を 抽出するためのSQL文を教えてください。
- ベストアンサー
- その他(データベース)
- 【SQL】日付が最大のレコード群を取得したい
Aテーブルから日付が最大のレコードを取得し(AAとする) AAに対して、さらに抽出条件を加えたいです。 Aテーブル: 商品名│日付 │ あああ│2007/01/01│ いいい│2007/01/02│←このレコード ううう│2007/01/01│ おおお│2007/01/02│←このレコード 上記の場合、商品名=「いいい」「おおお」の レコードを取り出したいのです。 さらにはそのレコード達に対して抽出を行いたいのですが まずは、この取り出し方をご教授ください。 (※grpup句やMAXを使用してみましたが、うまくいきません。。) よろしくお願いします。
- ベストアンサー
- Oracle
お礼
ご回答ありがとうございます。 再度のSQL文のご提示、大変たすかります。 何度も、お手数をおかけして申し訳ございません。 再度、いただいたSQLでテストしてみます。 ありがとうございました。