2016-05-21 7 views
0

編集:PHP、MySQL。最小値と最大値の日、明確化のための月と年

これは私のテーブルです:

ID  Datetime   Date  Temp 
6043 2016-05-24 10:20:00 2016-05-24 19.3 
6042 2016-05-24 10:15:00 2016-05-24 19.1 
6041 2016-05-24 10:10:00 2016-05-24 19.1 
6040 2016-05-24 10:05:00 2016-05-24 19.1 

私がやろうとしている何が最高の「温度」で行を選択することです。

これは私のクエリです:

SELECT max(temp) as maxtemp FROM weatherdata WHERE day(date) = 24 

クエリは私だけmaxtempを与え、どのように私はIDと日時を得ることができますか?

ゴール(日(日)はxxは= WHERE)私のテーブルにあなたの全体のweatherdataを取得しようとしているよう

種類よろしく

+0

_「それは機能していません」_という意味ですか?出力は何ですか?アウトプットとは何を期待していますか?間違いはありますか? – Jeff

+0

私は、特定の日があなたのデータベースで一番ホットなものであるという結果を得ることが期待されます。それはあなたが探しているものです。 – Jeff

+0

こんにちはジェフはあなたのコメントに感謝します。私は管理者がそれをオフにして以来、ブラウザで何の出力も得られず、エラーも表示されません。うーん、あなたの2番目のコメントに、その後、どのように最大値と最小値を得ることができますか? – droid

答えて

0

それは私には見える毎日の最大値を得ることです与えられた月の最高温度を含む観測の観測行。

これは、あなたが実現したように、2つのステップを必要とします。最初のステップ:毎月最高の気温観測を見つける。

   SELECT MAX(temp) temp, LAST_DAY(`datetime`) month_ending 
       FROM weatherdata 
       GROUP BY LAST_DAY(`datetime`) 

ここにトリックは、各観測が発生する月に把握するLAST_DAY()を使用することです:あなたはそうのようにそれを行います。任意の日付、日時またはタイムスタンプ項目を取り、その月の最終日の日付を取得します。このクエリは、1か月間に1つのtempを含む結果セットを提供します。それを試してみてください。それがあなたのために働くことを確認してください。

次は、そのように、あなたの詳細な観測テーブルにそれに参加する必要があります。

SELECT w.* 
    FROM weatherdata w 
    JOIN (
       SELECT MAX(temp) temp, LAST_DAY(`datetime`) month_ending 
       FROM weatherdata 
       GROUP BY LAST_DAY(`datetime`) 
     ) m ON w.temp = m.temp 
      AND LAST_DAY(w.`datetime`) = m.month_ending 
    ORDER BY w.`datetime` 

これはあなたに詳細な観測結果が得られます。特定の月に複数の観測で最高温度が発生した場合は、それらをすべて取得することに注意してください。あなたが唯一のいくつかの数ヶ月をしたい場合は

最後に、これを入れWHERE句右ORDER BY句の前に

WHERE `datetime` >= '2016-04-01 
    AND `datetime` < '2016-05-01 -- to get April 2016 

プロヒント:列名として、datetimeのように、データ型の名前を使用しないでください。それはあなたのデータベースを厄介にするのを難しくします。

+0

ありがとうございます。それは私が理解しているよりもSQLの方が多いです。私はそれを保存して、SQLにもっと慣れてきます。 – droid

+1

オハイオ州、私はあなたの例を理解するのに役立ついくつかの読書を私に指摘することができますか?私はそれを実行することができるかもしれませんが、私は理解することをコピー/ペースト - それを離れる代わりに好む:)私はグループ化とjoingに飛び込む必要があることがわかりますか?私はその月の最大値/最小値を求めているだけでなく、それぞれ別々の日と年を求めています。種類は – droid

+0

です。GROUP BYを使用したクエリは、* aggregate *クエリと呼ばれます。 'JOIN'関数は、彼らが言っているとおりです。あなたはそれらのものを見ることができます。私はあなたが最初に集合クエリのハングアップを取得し、次に結合操作を得ることができるように、私の答えを分解しようとしました。 CodecademyとKhan AcademyにSQLチュートリアルがあります。しかし、友人は友人にW3Schoolを勧めていません。それはあなたが単に魔法の呪文としてSOの答えを使用するのではなく、理解しようとしている**素晴らしい**です。 –

関連する問題