如何运用MySQL语句实现高效查询?

摘要:1、查询时间的格式: (1) 查询时将时间戳格式化 SELECT FROM_UNIXTIME(eventtime) FROM table_name SELECT FROM_UNIXTIME(eventtime, '%
1、查询时间的格式: (1) 查询时将时间戳格式化 SELECT FROM_UNIXTIME(eventtime) FROM table_name SELECT FROM_UNIXTIME(eventtime, '%Y-%m-%d %H:%i:%S') FROM table_name (2)查询1月18号 post_date为date或者datetime类型,同理可以只 month(post_date)=n查某个月,或者 day(post_date)=n某一天,或者 year(post_date)=n 某一年的数据。 SELECT * FROM posts WHERE MONTH(post_date)='1' AND DAY(post_date)='18'; (3)查询datetime类型时,只对比其中的日期。例如查询2019-01-02数据,post_date为datetime类型、post_time为时间戳(int)类型 SELECT * FROM posts WHERE DATE(post_date) = '2019-01-02'; SELECT * FROM posts WHERE DATE_FORMAT(post_time,'%Y-%m-%d') = '2019-01-02'; SELECT * FROM posts WHERE post_time>=unix_timestamp('2019-01-02') (4)按时间分组查数据 SELECT DATE_FORMAT(eventtime,'%Y%m') AS ym,COUNT(*) FROM table_name GROUP BY ym #按月分组 SELECT DATE_FORMAT(eventtime,'%Y%m%d') AS ymd,COUNT(*) FROM table_name GROUP BY ymd #按天分组 (4)按周分组和按月分组查数据 #按周统计,mdate为每周第一天,如果某一周里只有一天有数据,比如2023-01-02,则mdate为该2023-01-02,而不是该周第一天2023-01-01 SELECT MIN(event_time) AS mdate,DATE_FORMAT(event_time,"%X-%V") week_num,SUM(ltv14d) AS LTV1W,SUM(ltv0m) AS LTV0M FROM data_ltv_debug WHERE event_time>='2022-03-01' GROUP BY week_num; #按月统计 SELECT DATE_FORMAT(event_time,'%Y-%m') AS mdate,SUM(ltv14d) AS LTV1W,SUM(mltv0m) AS LTV0M FROM data_ltv_debug WHERE event_time>='2022-03-01' AND event_time<'2023-05-01' GROUP BY mdate; 2、查询一段时间内,每5分钟间隔分时在线数据统计(eventtime是时间戳) 可以延伸统计一段时间内每10分钟、30分钟、1小时等时间段为分组的登录、付费、激活等各种数据。
阅读全文