mysql oracle構建臨時連續日期序列

2021-10-11 02:00:14 字數 2803 閱讀 7272

做統計分析的時候,總有些按日期查詢。比如近 7 天資料,近 30 天資料,當月資料之類的。但是表中的日期並不一定是連續的,這就需要構建乙個日期序列作為主表查詢。每次做這類查詢都要baidu半天怎麼構建日期序列,今天記錄一下。

1、建立日期表

這個方法是在前公司偶然見到的。顧名思義就是建立一張資料表,裡面儲存了從當天開始一直向前推得日期資料,示例如下:

這種方式太簡單了,就不貼 sql 了。

2、建立數字序列表

使用日期序列表太麻煩了,我們可以借助乙個數字序列表來實現上述查詢,示例如下:

然後 sql 就是這樣的了:

-- 最近7天序列

select

date_format(date_add(

now(),

interval

@i :=@i-

1day),

'%y-%m-%d'

)date

from

number join

(select

@i :=

1) t

where

seq <=7;

-- 當前周每天序列

select

date_format(date_add(

now(),

interval

@i :=@i-

1day),

'%y-%m-%d'

)date

from

number join

(select

@i :=

1) t

where

seq <=

(weekday(

now())

+1);

-- 當前月每天序列

select

date_format(date_add(

now(),

interval

@i :=@i-

1day),

'%y-%m-%d'

)date

from

number join

(select

@i :=

1) t

where

seq <=

(dayofmonth(

now())

);-- 最近6個月序列

select

date_format(date_add(

now(),

interval

@i :=@i-

1month),

'%y-%m'

)date

from

number join

(select

@i :=

1) t

where

seq <=6;

-- 當前年每月序列

select

date_format(date_add(

now(),

interval

@i :=@i-

1month),

'%y-%m'

)date

from

number join

(select

@i :=

1) t

where

seq <=

(month

(now()));

不得不說,還是 oracle 強大

-- 最近7天序列

select to_char(sysdate -

level+1

,'yyyy-mm-dd'

) date_seq from dual connect

bylevel

<=7;

-- 當前周每天序列

select to_char(sysdate -

level+1

,'yyyy-mm-dd'

) date_seq from dual connect

bylevel

<= trunc(sysdate - trunc(sysdate,

'd')-1

)+1;

-- 當前月每天序列

select to_char(sysdate -

level+1

,'yyyy-mm-dd'

) date_seq from dual connect

bylevel

<= to_char(sysdate,

'dd');

-- 最近6個月序列

select to_char(add_months(sysdate,

-level+1

),'yyyy-mm'

)month

from dual connect

bylevel

<=6;

-- 當前年每月序列

select to_char(add_months(sysdate,

-level+1

),'yyyy-mm'

)month

from dual connect

bylevel

<= to_char(sysdate,

'mm'

);

有了這幾個基本的,其他的變種應該也不難寫了。

mySql oracle分頁機制

mysql oracle分頁機制 1.mysql中的limit關鍵字 以模糊查詢為例子,limit寫到where子句的後面 select from user where name like mm limit startrow,readsize 其中值得推敲的是startrow和readsize也就是...

Mysql Oracle的資料遷移

當我們遇到資料量較大的資料遷移時,並且還是跨資料庫操作,則建議用資料庫的自帶工具比較好!本例子介紹由mysql oracle的用資料庫的自帶工具資料遷移!第一步 將資料從mysql中提取出來到檔案,用到shell指令碼,sql指令碼如下 主要用到 select from into outfile m...

mysql oracle的字段連線

mysql concat str1,str2,其中,如果str1裡面有單引號,需要在單引號前面加上 就可以不轉義,如 flagnation oracle str1 str2 其中,如果str1裡面有單引號,需要在單引號前面再加乙個單引號,就可以不轉義,如 select insert into enu...