天天看點

時間問題,你會嗎?

時間問題,你會嗎?

某店鋪的商品資訊表中記錄了有哪些商品

時間問題,你會嗎?

訂單明細表中記錄了商品銷售的流水;"訂單明細表"中的'商品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()));

查詢結果:

![微信圖檔_20211008193745.jpg](https://ucc.alicdn.com/pic/developer-ecology/aff000afcfbb4a06ac70292a87376cec.jpg)
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);

查詢結果:

![微信圖檔_20211008193909.jpg](https://ucc.alicdn.com/pic/developer-ecology/40b4e16cf454494c809dc8b83adf90f0.jpg)
【本題考點】



1)涉及到多條件分組問題,要想到使用case when條件表達式。



2)時間問題,要想到常用的日期函數(datediff和timestampdiff)來解決。

![微信圖檔_20211008193937.jpg](https://ucc.alicdn.com/pic/developer-ecology/e97b8bf3449b4d2fa95a2666e8a73964.jpg)
           

繼續閱讀