• ベストアンサー
  • 困ってます

MySQLでデータが存在する日付を取得する方法

MySQLで、DATETIME型のカラムから、指定した日数分の、データが存在する日付を取得することは可能でしょうか? 例えば、下記 table_a から最近3日分のデータが存在する日を取得したい場合、 2011-06-18 2011-06-16 2011-06-12 が最近3日のデータが存在する日なので、結果に示すようなものが取得したい内容となります。 (下記結果では、各日付けの最後の時刻が取得されていますが、時刻はどれでも構いません) もしそのようなことができるSQL構文がありましたら、ご教示ください。 よろしくお願いします。 (table_a) +---------------------+ | date | +---------------------+ | 2011-06-09 09:00:00 | +---------------------+ | 2011-06-09 15:00:00 | +---------------------+ | 2011-06-10 09:00:00 | +---------------------+ | 2011-06-11 09:00:00 | +---------------------+ | 2011-06-12 07:00:00 | +---------------------+ | 2011-06-12 09:00:00 | +---------------------+ | 2011-06-16 09:00:00 | +---------------------+ | 2011-06-18 09:00:00 | +---------------------+ | 2011-06-18 12:00:00 | +---------------------+ | 2011-06-18 20:00:00 | +---------------------+ (結果) +---------------------+ | date | +---------------------+ | 2011-06-18 20:00:00 | +---------------------+ | 2011-06-16 09:00:00 | +---------------------+ | 2011-06-12 09:00:00 | +---------------------+

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数310
  • ありがとう数1

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

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

>2011-06-18 >2011-06-16 >2011-06-12 3日じゃなくないですか? 結果がdateだけではなくなりますが、以下の感じでどうでしょうか。 SELECT DATE_FORMAT(table_a.date,'%Y-%m-%d') as formatdate,date FROM `table_a` WHERE DATE_FORMAT(table_a.date,'%Y-%m-%d') >= date_add(CURRENT_TIMESTAMP(), interval -3 DAY) GROUP BY formatdate 日付だけ取りたいなら SELECT DISTINCT DATE_FORMAT(table_a.date,'%Y-%m-%d') as date FROM `table_a` WHERE DATE_FORMAT(table_a.date,'%Y-%m-%d') >= date_add(CURRENT_TIMESTAMP(), interval -3 DAY) とするとか # WHERE句でDATE_FORMATしていますが、日単位になるのかどうかわからない(未検証)なので、変換しています。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 > 3日じゃなくないですか? table_aの中での3日分を取得したかったのです。 以下で取得することができました。 select distinct date_format(table_a.date,'%Y-%m-%d') as formatdate from table_a order by formatdate desc limit 3;

関連するQ&A

  • 特定のデータの前後を取得したい

    以下のようなテーブルがあり、 SELECT id , regist_date FROM table_name ORDER BY regist_date DESC; ↑このSQLで並べると↓以下になるとします。 id(int型)   regist_date(datetime型) 12      2017-03-30 08:05:03 95      2017-03-29 19:05:03 72      2017-03-28 12:05:03 15      2017-03-28 12:05:03 62      2017-03-27 15:05:03 94      2017-03-26 12:05:03 やりたい事はidが72というのが分かっており、 そのデータと前後のデータを取得したいです。 ※日付の部分が完全に重複するデータが存在する場合もあります。 ※idは重複しません。 ↓このデータがとりたいです。 95      2017-03-29 19:05:03 72      2017-03-28 12:05:03 15      2017-03-28 12:05:03 SELECT * FROM table_name WHERE id = 72 ORDER BY regist_date DESC; ここから先が分からなくなってしまいどなたかわかる方いらっしゃいますか?

    • ベストアンサー
    • MySQL
  • mysqlでdate型のカラムに今日から1年分の日付を挿入するSQLは

    mysqlでdate型のカラムに今日から1年分の日付を挿入するSQLは書けますでしょうか ・テーブル  T_TEMP ・カラム  M_DATE (DATE型) ・SQL  insert into T_TEMP (select ???); 以上、よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLで日毎の最高点を取得するSQLについて

    何時もお世話になっております。 日付ごとの最高ポイントを取得する 効率の良いMySQLでのSQLをご教授下さい。 T_DATA flg kbn point biko date ------------------------------ true 3 90 NNN 20141231 true 1 80 XXX 20150101 true 2 60 YYY 20150101 true 3 70 XXX 20150101 true 1 40 xxx 20150201 true 2 60 yyy 20150201 true 1 60 AAA 20150301 true 2 90 BBB 20150301 true 3 40 CCC 20150301 true 1 60 aaa 20150401 true 2 70 bbb 20150401 true 3 30 ccc 20150401 false 4 90 ddd 20150401 ■欲しい状態 kbn point biko date ----------------------- 2 70 bbb 20150401 2 90 BBB 20150301 2 60 yyy 20150201 1 80 XXX 20150101 (1)dateカラム毎にpointカラムが最大のデータを取得したいです。 (2)flgカラムがtrueのデータのみ取得したいです。 (3)dateカラムが降順になるよう取得したいです。 (4)dateカラムは、直近4日分取得したいです。 以上の条件で取得したく思います。 どうぞ、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 日付が上手く取得できないです

    $row['date'] で吐き出してます。 この吐き出したデータの最大値を取得したいです。 5/5 5/10 5/20 なら5/20を取りたいわけです。 しかし、この日付。max()で正常な最大値が取得できないです。SQLのORDER BYなら日付でも判別しますが なにか方法はないですか?? あくまでも一度全部の日付をだしたいので、SQLで最大値をとるのでは、ちょっと違ってしまうです。

    • ベストアンサー
    • PHP
  • mysqlに格納されている日付のデータから重複なしで年を取得する方法

    mysqlに格納されている日付のデータから重複なしで年を取得する方法 を検討しているのですが、どなたかご教授していただければと 思います。 下記のデータベースの場合 2007 2008 2009 2011 といった値を抽出したいと考えております。 どうぞよろしくお願いいたします。 mysql> select*LOGS; +-----+---------------------+------+ | UPDATE_DATE | ITEM_NO | +---------------------+------+ | 2007-07-05 14:35:35 | 1 | | 2007-07-05 14:42:20 | 5 | | 2008-07-06 00:01:20 | 12 | | 2009-07-06 13:38:16 | 13 | | 2009-07-06 13:47:45 | 13 | | 2011-07-06 13:54:10 | 2 | +---------------------+------+

    • ベストアンサー
    • MySQL
  • DB登録に関する日付の認識

    はじめまして、こんばんは。分からないことがあり質問させていただきます。 現在、PHPにてMySQLへアクセスログを登録するものを作成しており、同じ日付に複数訪れた人は、最終日時。はじめて訪れた人はその日時を登録したいのですが、登録(または更新)する際、データベースに設定のdateカラム(datetime)を参照したとき、同じ日付をどう判別するのか?が分かりません。 以上のことから、これまで年月日のみをdateカラムに登録していたのですが、時間も登録したく考え、改め見直しているのですが、時間までをも登録した場合の日付の判別が分からないのです。 お恥ずかしいとは思うものの、現在の登録スクリプトは、 $y = date("Y"); $m = date("m"); $d = date("d"); $date = $y.$m.$d; $sql = "insert................ それを、 $date = date("Y-m-d H:i:s"); で登録したいと考えております。 お忙しい中恐縮ですが、ご指導いただければ幸いです。

    • ベストアンサー
    • PHP
  • PostgreSQLで日付範囲内の日付を全 て取得する方法

    PostgreSQLに、 2003/01/01~2003/05/10などの範囲の日付を 全て取得するSQLはありますでしょうか? 以下のような結果(日付リスト)を取得したいのですが、 DBには、日付カラムは存在しません。 PostgreSQL自体に日付を管理しているテーブルなどがあれば、それにアクセスできれば可能そうなのですが・・・ 2003/01/01 2003/01/02 2003/01/03 ・ ・ ・ 2003/05/10 よろしくお願いします。

  • Mysqlで最新の日付を持つデータを取得するSQLを書きたい

    Mysqlで最新の日付を持つデータを取得するSQLを書きたい 管理テーブル(MySql) 日 付|食べたもの ----------- 4月1日|パン 4月2日|ご飯 4月3日|パン 4月4日|パン 4月5日|ご飯 4月6日|カレー と言ったデータがあったとき パンを食べた最新の日付を取得したいとき どんなSQLを書けばいいのでしょうか? SELECT * FROM 管理テーブル WHERE 食べたもの = パン ORDER BY 日付 DESC LIMIT 1; とすれば、思うような結果が出ましたが LIMITは使いたくありません また 日 付|食べたもの ----------- 4月4日|パン 4月5日|ご飯 4月6日|カレー 上記のように 食べたのもそれぞれの最新の日付を表示して 一覧にしたいとき(表現ベタですみません) どんなSQLになりますか?

    • ベストアンサー
    • MySQL
  • mysqlのsql文について教えて下さい

    mysqlのsql文について教えて下さい 下記のようなテーブルとデータがあった場合に どうやれば 2,次郎だけを抽出できますか? 本日日付(2010-08-06)が 既にテーブルBにdateが存在する場合は 3,1,2010-08-04 3,1,2010-08-06を 対象外にしたいです。 Aテーブル id,user 1,太郎 2,次郎 3,3郎 Bテーブル targetid,homonid,date(datetime型) 3,1,2010-08-04 3,1,2010-08-06 3,2,2010-08-05 下記だと2010-08-04にヒットしてしまい(当たり前?)動作しません。 select distinct a.* from tblA a, tblB b where date_format(b.date, "%Y-%m-%d") <> "2010-08-06" ;

  • MySQLのdatetime型に0月0日を格納

    MySQLのdatetime型カラムに「月」や「日」だけ不明なデータを格納したいのですが、どうすれば良いでしょうか? ・具体的なパターンは、下記3フォーマットの何れかです ・2013-03-02 ・2013-03 ・2013 ※月日が不明なデータは全体の一部 ■案1 ・不明な日付を0に置き換え格納 ・2013-03-00 ・2013-00-00 ■案2 ・不明な日付を1に置き換え格納 ・2013-03-01 ・2013-01-01 ※本来の日付と見分けがつかなくなる ■質問 ・日付不明が後で判別できるよう、出来れば0で置き換えたい ・MySQL的に問題ないでしょうか? ・一般的に日付が不明なデータはどのように処理するのでしょうか? ■環境 ・MySQL ・PHP

    • ベストアンサー
    • MySQL