笔记—》mysql语句随手记

-- 1,查询3天前的数据

SELECT DATE_ADD(DATE_SUB(CURDATE(),INTERVAL 3 DAY),INTERVAL 0 HOUR)

--2,查询近七天的数据,若数据为空,以0填充

select v1.insurance_time ,ifnull(v2.incount,0) from  (
        SELECT DATE_ADD(DATE_SUB(CURDATE(),INTERVAL 1 DAY),INTERVAL 0 HOUR) as insurance_time
    union all
    SELECT DATE_ADD(DATE_SUB(CURDATE(),INTERVAL 2 DAY),INTERVAL 0 HOUR) as insurance_time
    union all
    SELECT DATE_ADD(DATE_SUB(CURDATE(),INTERVAL 3 DAY),INTERVAL 0 HOUR) as insurance_time
    union all
    SELECT DATE_ADD(DATE_SUB(CURDATE(),INTERVAL 4 DAY),INTERVAL 0 HOUR) as insurance_time
    union all
    SELECT DATE_ADD(DATE_SUB(CURDATE(),INTERVAL 5 DAY),INTERVAL 0 HOUR) as insurance_time
    union all
    SELECT DATE_ADD(DATE_SUB(CURDATE(),INTERVAL 6 DAY),INTERVAL 0 HOUR) as insurance_time
    union all
    SELECT DATE_ADD(DATE_SUB(CURDATE(),INTERVAL 7 DAY),INTERVAL 0 HOUR) as insurance_time
) v1  LEFT JOIN(
    SELECT insurance_time, incount from tablexxx
        GROUP BY insurance_time
) v2  on v1.insurance_time=v2.insurance_time

3,某个表的“消息”字段由逗号分隔组成,将逗号分隔一行数据分割成id相同,问题不同的多行数据(mysql.help_topic是mysql数据库下的原生表,非自建表)

SELECT a.id,SUBSTRING_INDEX(SUBSTRING_INDEX(a.fail_message,',',b.help_topic_id+1),',',-1) 
FROM
baoji_sendagainlog a
JOIN
mysql.help_topic b
ON b.help_topic_id < (LENGTH(a.fail_message) - LENGTH(REPLACE(a.fail_message,',',''))+1)
ORDER BY a.id; 
 

4,删除重复数据

场景:在一个表中, channel_id、data_pipe_id、owner_company_id、company_requirements_id、receive_media 这几个字段都含有重复的数据,我们将这些重复且相同的数据删掉,保留唯一一条。

(mysql的删除语句中的子查询如果涉及到被删除的表,需要使用中间表,oracle则不用)

delete FROM x_leads_count   WHERE  id IN ( SELECT b.id FROM
   (
    SELECT
     c.id
    FROM
     x_leads_count c
    WHERE
     c.insurance_time = '2021-01-12 00:00:00'
    GROUP BY
     c.channel_id,
     c.data_pipe_id,
     c.owner_company_id,
     c.company_requirements_id,
     c.receive_media
    HAVING
     count(c.id) > 1
   ) b
 );

猜你喜欢

转载自blog.csdn.net/nienianzhi1744/article/details/105491953