Mysql 求滑動訂單問題

2021-08-28 09:05:02 字數 3326 閱讀 6561

1.需求

求出滑動訂單

2.示例

這裡的滑動訂單指的是,按照每12個月或者每個季度【3個月】求出訂單的某個特徵數。下面給出乙個示例。

有表orders。表資料如下:

mysql> select * from orders;

+-------------+-----------+

| order_month | order_num |

+-------------+-----------+

| 2017-02-01 | 23 |

| 2017-03-01 | 26 |

| 2017-04-01 | 24 |

| 2017-05-01 | 27 |

| 2017-06-01 | 26 |

| 2017-07-01 | 32 |

| 2017-08-01 | 34 |

| 2017-09-01 | 30 |

| 2017-10-01 | 31 |

| 2017-11-01 | 32 |

| 2017-12-01 | 33 |

| 2018-01-01 | 31 |

| 2018-02-01 | 34 |

| 2018-03-01 | 34 |

| 2018-04-01 | 38 |

| 2018-05-01 | 39 |

| 2018-06-01 | 35 |

| 2018-07-01 | 49 |

| 2018-08-01 | 56 |

| 2018-09-01 | 55 |

+-------------+-----------+

20 rows in set (0.00 sec)

那麼滑動訂單問題就是指求出表中起始月份+12月的總訂單數。

+-------------+------------+

| start_month | end_month |

+-------------+------------+

| 2017-02-01 | 2018-02-01 |

| 2017-03-01 | 2018-03-01 |

| 2017-04-01 | 2018-04-01 |

| 2017-05-01 | 2018-05-01 |

| 2017-06-01 | 2018-06-01 |

| 2017-07-01 | 2018-07-01 |

| 2017-08-01 | 2018-08-01 |

| 2017-09-01 | 2018-09-01 |

+-------------+------------+

8 rows in set (0.00 sec)

如上圖所示就是分別求出2017-02-01 => 2018-02-01的總訂單數;…2017-09-01 => 2018-09-01的總訂單數。最後的結果如下所示:

+-------------+------------+-------+

| start_month | end_month | total |

+-------------+------------+-------+

| 2017-02-01 | 2018-02-01 | 383 |

| 2017-03-01 | 2018-03-01 | 394 |

| 2017-04-01 | 2018-04-01 | 406 |

| 2017-05-01 | 2018-05-01 | 421 |

| 2017-06-01 | 2018-06-01 | 429 |

| 2017-07-01 | 2018-07-01 | 452 |

| 2017-08-01 | 2018-08-01 | 476 |

| 2017-09-01 | 2018-09-01 | 497 |

+-------------+------------+-------+

8 rows in set (0.00 sec)

3.**一
select

t1.start_month

,t1.end_month

,sum(order_num) as total

from orders ord1

inner join

( select

order_month as start_month

,date_add(order_month,interval 12 month) as end_month

from orders ord1

where date_add(ord1.order_month,interval 12 month) <= (select max(order_month) as max_month from orders)

)as t1

on ord1.order_month between t1.start_month and t1.end_month

group by t1.start_month;

這裡有一點需要注意:在inner join...on的語句中,on中的條件不一定非要是=號,可以使用>,<,!=,between on等等.

3.**二

select 

date_format(a.order_month,'%y%m') as start_month

,date_format(b.order_month,'%y%m') as end_month

,sum(c.order_num) as total

from orders a

inner join orders b

on date_add(a.order_month,interval 12 month ) = b.order_month

inner join orders c

on c.order_month between a.order_month and b.order_month

group by a.order_month,b.order_month;

這個**和上述的**效果一樣。

問題 J LZY訂單查詢

lzy由於在 飽了麼 工作的不錯,由其是上次在大家的幫助下完成了餐廳篩選系統,深得頂頭上司wlj的賞識。wlj今天交給他乙個新的任務,並且許諾lzy完成後給他公升職加薪。為了降低lzy的工作量,wlj只要求他篩選一天之內的訂單即可。lzy於是又來求助你們了。wlj這次給他的任務是,完成乙個訂單查詢系...

滑動視窗問題

題目 有乙個整型陣列 arr 和乙個大小為 w 的視窗從陣列的最左邊滑到最右邊,視窗每次向右邊滑乙個位置。返回乙個長度為n w 1的陣列res,res i 表示每一種視窗狀態下的最大值。以陣列為 4,3,5,4,3,3,6,7 w 3為例。因為第乙個視窗 4,3,5 的最大值為5,第二個視窗 3,5...

滑動視窗問題

judge 題意 給定乙個長度為n n 10 6 的陣列。有乙個大小為k的滑動視窗從陣列的最左端移動到最右端。求滑動視窗在每個位置時的最大值和最小值。總時間限制 12000ms 可以使用單調佇列來做這道題。include include using namespace std define mode...