
某店鋪的商品資訊表中記錄了有哪些商品
訂單明細表中記錄了商品銷售的流水;"訂單明細表"中的'商品ID' 與"商品資訊表"中的'商品ID'一一對應。
業務問題:每天更新"訂單明細表"裡的間隔周數。計算規則是目前日期與支付時間的相隔周數(值為其中一個,1周,2周,4周,8周,16周,16周以上)
【解題思路】
使用邏輯樹分析方法,将問題拆解為2個子問題:
1)計算目前日期與支付時間的相隔周數
2)根據間隔周數條件分組
1.計算目前日期與支付時間的相隔周數
設計到日期,要能想到《猴子從零學會SQL》裡講過的日期函數。
常用計算日期差的函數有倆datediff和timestampdiff。具體用法如下:
這裡使用timestampdiff函數可以直接計算兩個日期的相差周數。
而更新表,需要使用update函數,SQL文法如下
1 update <表名> set <字段名> =
`
js
用下面SQL就可以得到目前日期與支付時間的相隔周數
update 訂單明細表
set 間隔周數 =
(timestampdiff(WEEK,支付時間,NOW()));
查詢結果:

2.根據間隔周數條件分組
可以使用case when 條件表達式,對間隔周數按條件進行分組。
1 update 訂單明細表
2 set 間隔周數 =
3 (case when timestampdiff(WEEK,支付時間,NOW()) = 1 then '1周'
4 when timestampdiff(WEEK,支付時間,NOW()) = 2 then '2周'
5 when timestampdiff(WEEK,支付時間,NOW()) <= 4 then '4周'
6 when timestampdiff(WEEK,支付時間,NOW()) <= 8 then '8周'
7 when timestampdiff(WEEK,支付時間,NOW()) <= 16 then '16周'
8 else '16周以上'
9 end);
查詢結果:

【本題考點】
1)涉及到多條件分組問題,要想到使用case when條件表達式。
2)時間問題,要想到常用的日期函數(datediff和timestampdiff)來解決。
