关于mysq的个人总结

这段时间的分配到的任务是测试运营后台的首页数据,统计一些某些时间段的数据信息。

准备工作:

一、获取当前得到时间:

select now()

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

二、.时间戳的转换:

1.将年月日时分秒转化为时间戳:

UNIX_TIMESTAMP(NOW())

2.将时间戳转为年月日时分秒:

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

三、获取距离当前时间的前几天、前几个月、前一年的时间

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(日期, 时间间隔, 时间间隔类型type)可灵活替代如下:

1111

四、按每天进行统计

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值