mysqに関する個人的な要約

この期間中、割り当てられたタスクは、操作バックグラウンドのホームページデータをテストし、特定の期間のいくつかのデータ情報をカウントすることです。

準備オーケー:

1.現在の時刻を取得します。

select now()

結果:2019-10-12 17:00:48

2.タイムスタンプ変換:

1.年、月、日、時、分、秒をタイムスタンプに変換します。

UNIX_TIMESTAMP(NOW())

2.タイムスタンプを年、月、日、時、分、秒に変換します。

FROM_UNIXTIME(时间戳) 
例如:FROM_UNIXTIME(1539238971)

3.現在の時刻、過去数か月、および前年の時刻より前の時刻を取得します

1.n日前

DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL n DAY), '%Y-%m-%d 00:00:00')
等价于
DATE_SUB(CURDATE(), INTERVAL n DAY) 默认的时间格式就是 %Y-%m-%d 00:00:00 下面类似

2.最初のn週間:

DATE_SUB(CURDATE(), INTERVAL n WEEK)

3.最初のnか月

DATE_SUB(CURDATE(), INTERVAL n MONTH)

4.最初のn年間

DATE_SUB(CURDATE(), INTERVAL n YEAR)

要約すると、DATE_SUB(日付、時間間隔、時間間隔タイプ)は、次のように柔軟に置き換えることができます。

1111

4.毎日の統計

SELECT FROM_UNIXTIME(create_time,'%Y-%m-%d') as time , count(*) as count FROM 表名 where 条件 GROUP BY  time

因为我的时间是linux时间戳,所以FROM_UNIXTIME()去转换

私のテストコードを添付してください:

select DATE_FORMAT(FROM_UNIXTIME(soc.pay_time), '%Y-%m-%d') Day,count(*),sum(soc.paid_money)from so_order as so 
left join so_order_charge as soc on  so.charge_id = soc.id where so.status != 0 and so.order_type in (0, 1, 2, 3, 6) and so.shop_id != 0 
and soc.pay_time between UNIX_TIMESTAMP(DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 7 DAY), '%Y-%m-%d 00:00:00')) and UNIX_TIMESTAMP(DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 0 DAY), '%Y-%m-%d 00:00:00')) 
GROUP BY Day ORDER BY so.create_time desc

 

おすすめ

転載: blog.csdn.net/qq_25162431/article/details/102523958