人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLに関する質問です。(最大値の求め方)

id, date, hour というフィールドがあります。idはauto incrementで、主要キーです。dateは2007-05-01という形式で、hourは、毎日の勉強時間が入力されているとします。

このテーブルには、昔からの長期間のデータがあるのですが、最新の年月の月(今なら2007年5月)のうちの、最長勉強時間を抽出するにはどうしたらいいのでしょうか。

最新の年月の月のため、今日であれば、5月1日、2日、3日、4日、5日までのデータしかありません。もし計算する日が4月30日であれば、4月1日から30日までのデータが対象になります。

●質問者: sun-chan
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:2007年 4月1日 4月30日 5月 5月1日
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● okuryu
●27ポイント
SELECT
 MAX(hour)
FROM
 table_name
WHERE
 DATE_FORMAT(date, '%Y-%m' ) = '2007-05'

MAX 関数と DATE_FORMAT 関数を使って例えば2007年の5月の最大値を求めるならこんな感じでどうでしょうか。

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 3.6.2 特定のカラムの最大値が格納されているレコード

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.4 日付と時刻関数

◎質問者からの返答

where節の中で date_format が使えるんですね。

便利ー。



ありがとうございます。うまくいくかやってみます。


2 ● russian-blue
●27ポイント

検索条件が特定の年・月の一番勉強した

時間を求める場合はテーブル名がbenkyou

の場合 2007年5月のデータを検索するには

select ifnull(max(hour),0) as hour

from benkyou

where month(date)=5 and year(date)=2007

(勉強していない場合0時間を返す)

時間、日付も抽出したい場合は

(時間が一番長い日が複数ある場合、最初の日

を返す)

select hour,date from benkyou

where month(date)=5 and year(date)=2007

order by hour desc,date asc

limit 1

自動的に今月のデータを抽出する場合は

where month(date)=5 and year(date)=2007

の部分を

where month(date)=month(now())

and year(date)=year(now())

http://q.hatena.ne.jp/answer

◎質問者からの返答

date の欄は、2007-05-06 の形で格納されていますが、その場合でも


where month(date)=month(now()) and year(date)=year(now())


は、可能なんでしょうか?


とりあえず今日の昼間にでもテストデータを作ってやってみます。


3 ● Mook
●26ポイント ベストアンサー

date が日付型か文字列型かで処理が変わるかと思ったのですが、MySQL の date_format 関数はデータが文字列であっても、日付情報として処理してくれるようです。なので、この関数を使用する範囲では(たとえ文字列型でも)データの格納形式を気にしなくてもよさそうです。

確認のために、varchar 型で date を作成しデータを'2007/05/06' のように格納しても下記のSQL で正しい結果がでました(Ver 5.0.22)。


okuryu さんと russian-blue さんのいいとこ取りですが、

SELECT MAX( hour ) FROM studyTable WHERE
 DATE_FORMAT( NOW(), "%Y-%m") = DATE_FORMAT( date, "%Y-%m") 

で、今月の最大時間が表示されると思います。


MySQL 編16 - 日付関数、システム日付、切捨、日付差、日付加算、書式


蛇足ですが、

hour・・・時間を求める関数

date・・・日付型

として予約語になっていますので、テーブル内のカラム名としては使用しないほうが混乱しないと思います。

◎質問者からの返答

ありがとうございます!早速やってみます。


また、下のアドバイスもありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ