Open maple-chen-tw opened 2 months ago
SELECT W1.id
FROM Weather W1
JOIN Weather W2
ON W1.recordDate = DATE_ADD(W2.recordDate, INTERVAL 1 DAY)
WHERE W1.temperature > W2.temperature;
JOIN 的結果會變成下面的表格:在同一查詢中比較不同日期的氣溫
W1(當天)和 W2(前一天) |
W1.id | W1.recordDate | W1.temperature | W2.id | W2.recordDate | W2.temperature |
---|---|---|---|---|---|---|
2 | 2015-01-02 | 25 | 1 | 2015-01-01 | 10 | |
3 | 2015-01-03 | 20 | 2 | 2015-01-02 | 25 | |
4 | 2015-01-04 | 30 | 3 | 2015-01-03 | 20 |
WHERE
再去比對W1.temperature > W2.temperature,所以就會選到 W1.id = 2
和 W1.id = 4
。
在 MySQL 中,處理日期加減的函數有 DATE_ADD() 和 DATE_SUB(),其中加日期時間是用 DATE_ADD(),減日期時間則是用 DATE_SUB()。
加日期時間: DATE_ADD(datetime, INTERVAL expr unit)
減日期時間: DATE_SUB(datetime, INTERVAL expr unit)
------------------------------------------------------------------
# 取得一天後的日期時間:
mysql> SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);
'2018-05-02'
# 取得一年後的日期時間:
mysql> SELECT DATE_ADD('2018-05-01',INTERVAL 1 YEAR);
'2019-05-01'
------------------------------------------------------------------
# 取得一天前的日期時間:
mysql> SELECT DATE_SUB('2018-05-01',INTERVAL 1 DAY);
'2018-04-30'
# 取得一年前的日期時間:
mysql> SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR);
'2017-05-01'
------------------------------------------------------------------
參考網址: https://www.fooish.com/sql/mysql-date_add-function.html
MySQL 可以使用 DATE_FORMAT() 函數來顯示不同格式的日期時間。
DATE_FORMAT() 語法 (Syntax)
DATE_FORMAT(date, format)
CASE 類似於程式語言裡的 if/then/else 語句,用來作邏輯判斷。
CASE 語法 (SQL CASE Syntax)
CASE
WHEN condition THEN result
[WHEN···]
[ELSE result]
END;
若省略了 ELSE 子句且洽無相符的條件則會返回 NULL。
SELECT
DATE_FORMAT(trans_date, '%Y-%m') AS month,
country,
COUNT(id) AS trans_count,
SUM(CASE WHEN state='approved' THEN 1 ELSE 0 END) AS approved_count,
SUM(amount) AS trans_total_amount,
SUM(CASE WHEN state='approved' THEN amount ELSE 0 END) AS approved_total_amount
FROM
Transactions
GROUP BY
DATE_FORMAT(trans_date, '%Y-%m'), country
NULL和數值的分開處理
在SQL裡,
null
是用來標示value not exist
的( 即unlnown
),所以不適用於任何comparison operators(=, !=, <, >
)。 舉例:NULL = NULL
orNULL != NULL
isunknown
(neither true nor false)怎麼處理NULL
column IS NULL
用來確認 column 的值為NULL
。column IS NOT NULL
用來確認 column 的值為not NULL
。