今天突然来了一人功能,提供一个图表数据的接口。
我心一想,这不是很简单的功能嘛?
先划一天水,再说!
过了一天,我一天,这个日期怎么是10位的时间戳的int类型。
卧槽了,这咋办~~
我心态崩了啊
小意思,发哥出马,一个顶俩,还能继续划水
思路整理:
1、时间戳是从1970年0点0分0秒开始。
2、将以秒为单位的时间戳转化为以天为单位的整形
3、按照转化的天进行分组统计,计算count、或者其他聚合函数
4、将查询出来的结果再次进行转化,将从1970年0点0分0秒的天数,转为日期。
5、大功告成
用图来显示 更清晰:
核心就是单位、精度的思想。
比如:N=102;
10个间隔为一段距离,那么102/10得到10。故可知 100-109都处于同一个段。
哈哈哈哈,是不是很简单。
SQL语句:
SELECT mail_send_time / 2678400 AS p_day, COUNT ( * ) AS p_nums FROM kn_mf_short_message_info WHERE collect_target_id = '000000000000123456201905261955069131010780000000000001234' AND mail_send_time < 1617344934 GROUP BY p_day ORDER BY p_day;
java中日期转化
public static enum UnitEnum { /** * 天、月单位 */ DAY(86400L), MONTH(2678400L); Long value; UnitEnum(Long value) { this.value = value; } public Long getValue() { return value; } public static void main(String[] args) { // 时间戳转日期 final String f0 = DateFormatUtils.format(MONTH.getValue() * 576 * 1000L, DateFormatUtils.ISO_DATE_FORMAT.getPattern()); final String f2 = DateFormatUtils.format(MONTH.getValue() * 729 * 1000L, DateFormatUtils.ISO_DATE_FORMAT.getPattern()); final String f3 = DateFormatUtils.format(DAY.getValue() * 17920 * 1000L, DateFormatUtils.ISO_DATE_FORMAT.getPattern()); System.out.println("f0 = " + f0); System.out.println("f2 = " + f2); System.out.println("f3 = " + f3); } } <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency>
其他业务可自行扩展。