• ベストアンサー

MySQLで、本日に一番近い日のレコード

Linuxサーバーで、MySQLを使っています。 ユーザーの付属テーブルの中で、 同じユーザーのレコードが複数あります。 その多数のレコード中に、日付項目があります。 そこから、ユーザー毎に、本日に一番近い過去未来の日のレコードだけを抽出するには、 どのようなSQL文を書けばよいでしょうか? 抽出結果は、下記のようになるように。 ユーザーA、本日に一番近い日付、・・・・ ユーザーB、本日に一番近い日付、・・・・ ユーザーC、本日に一番近い日付、・・・・ ※同一ユーザーは、複数抽出されない。=ユーザーは、ユニークになる抽出結果。

  • MySQL
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
回答No.1

select user_id, max(date) from your_table group by user_id;

longucumber0519
質問者

お礼

ご回答ありがとうございます。とても助かります。 でも、最大日付だけ抽出するようなSQL文に見えます... まだ、SQL詳しくないので、とりあえず、やってみます。 その1行で、 1.過去に複数ある日付の中から、指定日に、一番近いレコード。 2.未来に複数ある日付の中から、指定日に、一番近いレコード。 が、抽出できるなら、すごく楽なので。

関連するQ&A

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

    Linuxサーバーで、MySQLを使っています。 商品テーブルの中で、 同じ商品のレコードが複数あります。 (例です。本来ならそんなつくりのテーブルは作らないです。) その多数のレコード中に、日付項目があります。 そこから、 1)商品毎に、2)指定日に、3)一番近い過去未来の日の、4)レコードだけを抽出するには、 どのようなSQL文を書けばよいでしょうか? 1.過去に複数ある日付の中から、指定日に、一番近いレコード。 2.未来に複数ある日付の中から、指定日に、一番近いレコード。 3.同一商品レコードは、複数抽出されない。

    • ベストアンサー
    • MySQL
  • SQLで、指定日条件のSQL文

    MySQLを使っています。 商品テーブルの中で、 同じ商品のレコードが複数あります。 その多数のレコード中に、日付項目があります。 そこから、 1)商品IDで重複せずに、2)指定日に、3)一番近い過去の日、4)指定日を含めて、複数ある未来の全レコード、を抽出するには、 どのようなSQL文を書けばよいでしょうか? 商品でユニークになるように、 1.過去に複数ある日付の中から、指定日に、一番近いレコード。 2.未来に複数ある日付の中の、全ての未来の、レコード。 3.同一商品レコードは、複数抽出されない。

  • 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 最大値のレコードの特定

    SQLが上手く作れないためお知恵をお貸し頂ければ幸いです。 articleテーブルに存在するユーザの一覧に、記事の投稿件数、記事に含まれるsizeの最大値、最大値が投稿された記事の登録日時、記事のタイトルを加えたものを抽出したいです。 [ article ] article_id user_id size insert_unixtime title ---------------------------------------------------------- 1 100 18 20130101 aaaaaaaaaaaa 2 100 10 20130102 bbbbbbbbbbbb 3 100 18 20130103 cccccccccccc 4 200 11 20130201 dddddddddddd ↓↓希望する抽出結果↓↓ article_id user_id count max_size insert_unixtime title ---------------------------------------------------------- 3 100 3 18 20130103 cccccccccccc 4 200 1 11 20130201 dddddddddddd 自己結合等で、ユーザ毎の最大sizeを抽出してそれに該当するレコードを探すことであるていどはできたのですが 最大sizeが複数あった場合に、両方のレコードを取得してしまいます。(上記の例では、article_id 1と3を抽出してしまう。 ※最大sizeが複数会った場合はinsert_unixtimeが大きい方のタイトルを表示したい。 うまく1SQLで抽出できないでしょうか。

  • Mysqlレコード集計について

    Mysqlレコード集計について 以下のようなテーブルがあります。 勝った試合は[win]に1が入っています。 |seq| date |win| | 1|2010/04/01| 1| | 2|2010/04/02| 0| | 3|2010/04/03| 1| | 4|2010/04/04| 1| | 5|2010/04/05| 1| [date] ASC 3連勝以上した回数をsqlで集計したいです。 sqlをいろいろ調べてみましたが、わかりませんでした。 わかる方いらっしゃれば教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLで、日付最大のレコード抽出

    MySQLをJAVAで使っています。 指定キーの中で、一番日付の大きなレコード項目全てを 取り出したいのですが、 下記SQLだと、何も抽出されません。 (今朝、ここで教えて頂いたSQL文です) 何が間違っているのでしょうか? さらに、もっと簡単なSQL文はないでしょうか? SELECT * FROM food WHERE (food_id = 1) AND (food_name = 'みかん') AND (karute_id = (SELECT MAX(date) FROM food WHERE (food_id = 1) AND (food_name = 'みかん'))) 与える検索キー項目は、food_id=1, food_name=みかん foodテーブル例 food_id  food_name   date --------------------------------- 1     みかん    2015-01-01 1     みかん    2015-02-01 1     みかん    null 1     みかん    2015-04-01 2     きんめだい  2015-01-01 2     じんたん   2015-02-01 2     コロッケ   2015-02-01

    • ベストアンサー
    • MySQL
  • SQLite vs MySQL

    お世話になります。 データベースにアクセスするperl CGIを造ろうとしています。 1データベース・1テーブルのみの単純なつくりで 1レコードはだいたい、intergerが10項目、char[12]程度のtextが10項目、dateが5項目、 全部で10,000レコード程度の小規模なものです。 ユーザ数は特定の約30人程度です。各人、一日に2~3レコードにしか書き込み操作はしないはずです(時刻は重なるかもしれません)。 速度がクリティカルに要求されるわけではありません。 SQLiteとMySQLの比較は、ネット上でも多数見つかり、多数ユーザならMySQL、single userならSQLiteという感想が多いですが、30人というのが「多数」なのか、どうなのかわかりかねましたので、使用実感をお聞かせください。 SQLiteで少し組んでみたのですが、きわめて容易に作れるし、バックアップも簡単なので、30人程度ならSQLiteでも問題なしということであればSQLiteにしたいところです。

    • ベストアンサー
    • MySQL
  • MySQLで、日付最大のレコード抽出

    MySQLをJAVAで使っています。 指定キーの中で、一番日付の大きなレコード項目全てを 取り出したいのですが、 下記SQLだと、何も抽出されません。 何が間違っているのでしょうか? さらに、もっと簡単なSQL文はないでしょうか? SELECT * FROM food WHERE (food_id = 1) AND (food_name = 'みかん') AND (food_id = (SELECT MAX(date) FROM food WHERE (food_id = 1) AND (food_name = 'みかん'))) 与える検索キー項目は、food_id=1, food_name=みかん foodテーブル例 food_id  food_name   date --------------------------------- 1     みかん    2015-01-01 1     みかん    2015-02-01 1     みかん    null 1     みかん    2015-04-01 2     きんめだい  2015-01-01 2     じんたん   2015-02-01 2     コロッケ   2015-02-01

    • ベストアンサー
    • MySQL
  • 2つのテーブルからレコードを抽出する方法

    お世話になります。MySQLに関する質問です。 TABLE1とTABLE2の2つのテーブルからレコードを抽出する際、 TABLE1からは全項目のデータを取得し、TABLE2からは一部の項目の データを取得したいと考えています。 条件は、TABLE1とTABLE2を[No]という項目の値で紐(ひも)づけます。 (1) SELECT * FROM TABLE1 (2) SELECT COL_A, COL_B, COL_C FROM TABLE2 上記(1)(2)のレコードを1つのSQLで取得する方法について、どなたかご教授願えますか?

    • ベストアンサー
    • MySQL