(顺便分享一下sql中的一些常用方法和函数:
格式化日期:DATE_FORMAT('2021-08-31 00:00:00.0','%Y-%m-%d'),
日期向前后增加:DATE_ADD('2021-08-31 00:00:00.0',interval -1 DAY),
if的使用:if(t.dt< '2021-08-23',t.vip_index+t.vod_index,0)) allIdxIndex,
秒转date:FROM_UNIXTIME(秒) eg:FROM_UNIXTIME(1568419200000/1000) ---> 2019-09-14 08:00:00.0000,
日期向前- 20天: DATE_SUB( 2019-09-14 08:00:00.0000,INTERVAL 20 DAY),
日期转秒再转毫秒:UNIX_TIMESTAMP(#{nowDt})*1000,
分组使用:一组中的数据拼接:group_concat(name) as names,
拼接字符串(经常在like查询时使用):concat('% ',#{key},'%') ,
mybatis格式化小于等于:<![CDATA[ <= ]]>
)
left join :
第一条:
select t.a_id , sum(if(t.dt = DATE_ADD('2021-08-31 00:00:00.0',interval -1 DAY) ,t.vip_index+t.vod_index,0)) yesterdayIdxIndex , sum(if(t.dt = DATE_ADD('2021-08-31 00:00:00.0',interval -2 DAY) ,t.vip_index+t.vod_index,0)) beforeYesterdayIdxIndex from (select album_id,dt,vip_index,vod_index from op_details_vip_idx_v2 where album_id IN ( 13, 14) ) t LEFT join op_details_album_meta album on t.album_id = album.album_id group by t.album_id
第二条:
select t.a_id , sum(if(t.dt = DATE_ADD(2021-08-31 00:00:00.0,interval -1 DAY) ,t.vip_index+t.vod_index,0)) yesterdayIdxIndex , sum(if(t.dt = DATE_ADD(2021-08-31 00:00:00.0,interval -2 DAY) ,t.vip_index+t.vod_index,0)) beforeYesterdayIdxIndex from op_details_vip_idx_v2 t LEFT join op_details_album_meta aa on t.album_id = aa.album_id where t.album_id IN (13, 14) group by t.album_id
第一条和第二条过滤条件不一样,第二条可能会导致左连接失效,故用第一条比较好