SQL 按照季度,固定時間段,分組統計資料

2022-07-29 10:03:09 字數 1901 閱讀 1344

最近在工作中接到了乙個需求,要求統計當月以10天為乙個週期,每個週期的資料彙總資訊。假設有一張表如下:

表table_test中

id           amount         create_date

1            50                     2017-01-01

2            50                     2017-01-09

3            50                     2017-01-11

4            50                     2017-01-19

5            50                     2017-01-21

6            50                     2017-01-22

7            50                     2017-01-24

相當於以create_date為組條件,1 - 10,11 -20,21 - 月末,每乙個時間段的amount欄位的和。面對這個需求,首先想到的解決方案為以日期作為引數。使用**傳參重複呼叫,發現該方法效率極低,後來做出相應優化,使用union all去呼叫 sql如下

1

select

sum(amout) as

totalamount form table_test

2where create_date between

'2017-01-01

'and

'2017-01-10'3

union

all4

select

sum(amout) as

totalamount form table_test

5where create_date between

'2017-01-11

'and

'2017-01-20'6

union

all7

select

sum(amout) as

totalamount form table_test

8where create_date between

'2017-01-21

'and

'2017-01-30

'

後來資料量大了後發現,效率有些跟不上。就想到了代替的優化sql如下

1

select

2sum

(amount) totalamount,

3floor((day(create_date) -

day(now()))/

10) as

timesapn

4from

5table_test

6where

month(create_date) =

month

(now())

7group

by8 timesapn --該sql為mysql語句,如果為其他資料庫可替換為其他資料庫函式

關鍵點在於:

floor((day(create_date) - day(now()))/10) astimesapn

當 timesapn 為 0 時則在第乙個週期,為1則在第二個週期,以此類推,最後在以該字段為分組條件。完美解決效率問題。可以適當的想一下如果該需求改成按照季度統計。只需要擷取日期的月份/4則可以完美解決。也就是說這個sql

Oracle 按時間段分組統計

想要按時間段分組查詢,首先要了解level,connect by,oracle時間的加減.關於level這裡不多說,我只寫出乙個查詢語句 sql view plain copy level 是乙個偽例 select level from dual connect bylevel 10 結果 1 2 ...

mysql按照時間段內 每天統計

sql select t.report time,count report time from select date format report time,y m d as report time from report count as t group by t.report time date...

Sql 按照指定天數時間段查詢

begin try declare begintime datetime 2017 02 01 declare endtime datetime 2017 03 3 23 59 59 declare showtype int 0 展示的型別 0 日 1 十日 2 月 declare cuscount...