mysql中的年,月,日統計以及日曆表的實現

2021-10-08 21:17:19 字數 2828 閱讀 6748

1、建立日曆表指令碼

create table num (i int);-- 建立乙個表用來儲存0-9的數字

insert into num (i) values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- 生成0-9的數字,方便以後計算時間

create table if not exists calendar(datelist date); -- 生成乙個儲存日期的表,datalist是欄位名

-- 這裡是生成並插入日期資料

insert into calendar(datelist) select

adddate(

( -- 這裡的起始日期,你可以換成當前日期

date_format("2018-1-1", '%y-%m-%d')

),numlist.id

) as `date`

from

(select

n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000+ n10000.i * 10000 as id

from

num n1

cross join num as n10

cross join num as n100

cross join num as n1000

cross join num as n10000

) as numlist;

這樣就建立了2張表:num和calendar

2、按日期統計

select

c.datelist as date,

count(b.id) as count

from

calendar as c

left join (

select

*from

driver -- 真正想統計的表名

where

lnvalid = 2 -- 這個是查詢條件,你們酌情寫自己的

and flag = 0 -- 這個是查詢條件,你們酌情寫自己的

) as b on c.datelist = date(b.create_time) -- 兩個表的關聯,因為我表中crate_time是年月日時分秒的,所以要格式化後相等

where

c.datelist like '2019-10%' -- 這個是查詢某月的日期統計,在**中這塊應該是乙個引數。我這裡查詢的2023年10月份的統計

group by

datelist -- 這個分組按照日期分組,再次宣告這個是天的,如果月的這裡會不同

order by

datelist -- 這個排序是因為之前一次測試有count的在上面,沒有的在下面,日期沒有順序,所以我又公升序排了下。

3、按月份統計

select

date_format(c.datelist, '%y-%m') as date, -- 查詢的是年-月,所以要格式處理

count(b.id) as count

from

calendar as c

left join (

select

*from

driver -- 真正想統計的表名

where

lnvalid = 2 -- 這個是查詢條件,你們酌情寫自己的

and flag = 0 -- 這個是查詢條件,你們酌情寫自己的

) as b on c.datelist = date(b.create_time) -- 兩個表的關聯,因為我表中crate_time是年月日時分秒的,所以要格式化後相等

where

c.datelist like '2019%' -- 這個是查詢某月的日期統計,在**中這塊應該是乙個引數。我這裡查詢的2023年的統計

group by

date_format(c.datelist, '%y-%m')-- 這個分組按照月份分組的,因為datelist是年月日,所以要格式化處理成年月

order by

datelist -- 這個排序是因為之前一次測試有count的在上面,沒有的在下面,日期沒有順序,所以我又公升序排了下。

4、按照年統計

select

date_format(c.datelist, '%y') as date, -- 查詢的是年,所以要格式處理

count(b.id) as count

from

calendar as c

left join (

select

*from

base_driver -- 真正想統計的表名

where

if_lnvalid = 2 -- 這個是查詢條件,你們酌情寫自己的

and flag = 0 -- 這個是查詢條件,你們酌情寫自己的

) as b on c.datelist = date(b.create_time) -- 兩個表的關聯,因為我表中crate_time是年月日時分秒的,所以要格式化後相等

group by

date_format(c.datelist, '%y')-- 這個分組按照月份分組的,因為datelist是年月日,所以要格式化處理成年

order by

datelist -- 這個排序是因為之前一次測試有count的在上面,沒有的在下面,日期沒有順序,所以我又公升序排了下。

實現統計的年,月,日

時間外掛程式用的mydate97,我用yii框架寫的 最終實現的結果為 如果選擇時間間隔在 30 天之內,則展示這三十天中每天的資料,如果時間間隔 大於30天小於2年,則展示的是以月份為單位的資料,如果時間間隔大於兩年,展示的是以年份為單位的資料。以下為封裝的方法,之前用highchars做的統計 ...

獲取年月日

需求 獲取當前日期的前乙個月份 當月有 31 天時,js 日期物件 setmonth 問題 當前日期如果不是 31 號,是沒問題的,是 31 號就會有問題 比如今天是 2018 09 30 號,前乙個月應該是 2018 08 30 let now new date new date 2018 09 ...

怎得到年 月 日?

1 year formatdatetime yyyy date month formatdatetime mm date day formatdatetime dd date 2 delphi中自帶 decodedate 它的申明為 procedure decodedate date tdateti...