Durante este período de tiempo, la tarea asignada es probar los datos de la página de inicio del fondo de la operación y contar cierta información de datos en ciertos períodos de tiempo.
Listo para trabajar:
1. Obtenga la hora actual:
select now()
Resultados: 2019-10-12 17:00:48
2. Conversión de marca de tiempo:
1. Convierta el año, mes, día, hora, minuto y segundo en una marca de tiempo:
UNIX_TIMESTAMP(NOW())
2. Convierta la marca de tiempo en año, mes, día, hora, minuto y segundo:
FROM_UNIXTIME(时间戳)
例如:FROM_UNIXTIME(1539238971)
3. Obtener la hora anterior a la hora actual, los meses anteriores y el año anterior.
1. n días antes
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. Las primeras n semanas:
DATE_SUB(CURDATE(), INTERVAL n WEEK)
3. Los primeros n meses
DATE_SUB(CURDATE(), INTERVAL n MONTH)
4. Los primeros n años
DATE_SUB(CURDATE(), INTERVAL n YEAR)
En resumen: DATE_SUB (fecha, intervalo de tiempo, tipo de intervalo de tiempo) se puede reemplazar de manera flexible de la siguiente manera:
4. Estadísticas diarias
SELECT FROM_UNIXTIME(create_time,'%Y-%m-%d') as time , count(*) as count FROM 表名 where 条件 GROUP BY time
因为我的时间是linux时间戳,所以FROM_UNIXTIME()去转换
Adjunte mi código de prueba:
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