Leetcode Note: Mysql - Rising Temperature
Rising Temperature - LeetCode
https://leetcode.com/problems/rising-temperature/
- MySQL で取り組んだメモ
所感
- 全然わからん
回答
Rising Temperature - LeetCode
https://leetcode.com/problems/rising-temperature/solution/
SELECT weather.id AS 'Id'
FROM weather
JOIN weather w
ON DATEDIFF(weather.recordDate, w.recordDate) = 1
AND weather.Temperature > w.Temperature;
- SELECT:
SELECT weather.id AS 'Id'
- Wheather Table に含まれる Id を抽出
- FROM:
FROM weather
- Wheather Table から抽出
- JOIN:
JOIN weather w
- 2つ の weather テーブルを結合
- MySQL の場合 JOIN 単体で書くと CROSS JOIN, INNER JOIN と等価になる
- ON:
- JOIN で使う条件
- DATEDIFF:
DATEDIFF(weather.recordDate, w.recordDate) = 1
- 日付の差を計算する関数
- recordDate の差が 1 になる
- 日付が 1日 異なるレコード
- AND:
AND weather.Temperature > w.Temperature
- JOIN で使う条件
- Temperature が大きい方
MySQL :: MySQL 8.0 リファレンスマニュアル :: 12.7 日付および時間関数
https://dev.mysql.com/doc/refman/8.0/ja/date-and-time-functions.html#function_datediff
DATEDIFF(expr1,expr2)
DATEDIFF() は、ある日付から別の日付までの日数の値として表現された expr1 − expr2 を返します。expr1 および expr2 は、日付または日付時間式です。 値の日付部分のみが計算に使用されます。
DATEDIFF も、シンプルに JOIN だけ書くやり方も知らなかった・・・
JOIN については挙動を理解していないとどっちのテーブルをベースに操作しているのか分からなくなりそう