アプリ版:「スタンプのみでお礼する」機能のリリースについて

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 |
+---------------------+

A 回答 (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していますが、日単位になるのかどうかわからない(未検証)なので、変換しています。
    • good
    • 0
この回答へのお礼

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

> 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;

お礼日時:2011/06/20 09:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す