mysql常见的时间写法,函数,排名,case when


#查询表的索引
SHOW INDEX FROM  表名称
#删除表的索引
DROP INDEX STREET ON 表名称(字段);
#实时数据
where dateTime>=(NOW() - interval 24 hour)
#七天的数据
WHERE dateTime >= date_sub(curdate(), interval 7 day)
#当日的日期函数
where date = date_sub(curdate(), interval 2 day)
#
interval是减法的意思

时间的格式,传入开始时间和结束时间,只输入当前日期,规定好后面的时分秒

AND dateTime >= DATE_FORMAT(STR_TO_DATE((NOW() - interval 24 hour), '%Y-%m-%d'),'%Y-%m-%d 00:00:00') 
AND dateTime <= DATE_FORMAT(STR_TO_DATE((NOW() - interval 24 hour), '%Y-%m-%d'),'%Y-%m-%d 23:59:59')

 

AND 
dateTime BETWEEN DATE_FORMAT(STR_TO_DATE('2020-06-06', '%Y-%m-%d'),'%Y-%m-%d 00:00:00') 
AND DATE_FORMAT(STR_TO_DATE('2020-06-06', '%Y-%m-%d'),'%Y-%m-%d 23:59:59')

 

 WHERE dateTime &gt;= DATE_FORMAT(STR_TO_DATE(#{startTime, jdbcType=VARCHAR}, '%Y-%m-%d'),'%Y-%m-%d 00:00:00') 

AND dateTime &lt;= DATE_FORMAT(STR_TO_DATE(#{endTime, jdbcType=VARCHAR}, '%Y-%m-%d'),'%Y-%m-%d 23:59:59')

case when的用法

SELECT 
    CASE
    WHEN 字段名 = '1' THEN '自住'
    WHEN HOUSE_TYPE = '2' THEN '租住'
    WHEN HOUSE_TYPE = '3' THEN '投亲靠友'
    WHEN HOUSE_TYPE = '4' THEN '酒店'
    WHEN HOUSE_TYPE = '5' THEN '民宿'
    WHEN HOUSE_TYPE = '6' THEN '宿舍'
    WHEN HOUSE_TYPE = '7' THEN '工棚'
    WHEN HOUSE_TYPE = '8' THEN '其他'
    END as `name`,
    count(1) `value`
    FROM
    t_dws_dt_yd_tianfu_healthy_communication
    WHERE STREET = '条件'
    GROUP BY name

另外一种写法

SELECT
    CASE
    WHEN HOUSE_TYPE = '1' THEN '自住'
    WHEN HOUSE_TYPE = '2' THEN '租住'
    WHEN HOUSE_TYPE = '3' THEN '投亲靠友'
    WHEN HOUSE_TYPE = '4' THEN '酒店'
    WHEN HOUSE_TYPE = '5' THEN '民宿'
    WHEN HOUSE_TYPE = '6' THEN '宿舍'
    WHEN HOUSE_TYPE = '7' THEN '工棚'
    else '其他'
    END as name,
    count(1) value
    FROM
    t_dws_dt_yd_tianfu_healthy_communication
    WHERE STREET = #{street}
    GROUP BY name
    ORDER BY value DESC

#利用case when+排序 解决置顶排名问题,返之置底

这是置顶显示,置底的话order by flag desc反序排列即可;

select 
(case when a.rank='3' then 0 else 1 end) flag,a.* 
from userlevel a 
order by flag asc;

#方法二,通过union

select * 
from userlevel 
where rank='3' 
union all 
select * 
from userlevel 
where rank<>'3';

 

 

 #排名用法顺序排名,123456

SELECT id,`name`,total,
            (@i :=@i + 1) AS rank
FROM t_dws_xzfy_xzysqk,
            (SELECT @i := 0) t
WHERE date >= #{param1}
AND date <= #{param2}

 

#排名的用法不占位排名,11123456

SELECT
    appear,
CASE
WHEN @sn = appear 
    THEN @rank
WHEN @sn := appear 
    THEN @rank := @rank + 1
END rank
FROM
    (
        SELECT '100' appear
                UNION ALL
        SELECT '50' appear
                UNION ALL
        SELECT '60' appear
                UNION ALL
        SELECT '80' appear
                UNION ALL
        SELECT '80' appear
                
    ) M,
    (
        SELECT
            @rank :=0, @sn :=0
    ) t
ORDER BY
    appear DESC


#排名的用法不占位排名,111456

SELECT
    appear,
    @sn := @sn + 1,
    @ir := CASE
WHEN @rt = appear THEN
    @ir
WHEN @rt := appear THEN
    @sn
WHEN appear = 0 THEN
    @ir + 1
END rank
FROM
    (
        SELECT
            IFNULL((in_court / open_court), 0) appear
        FROM
            t_dws_xzfy_xzysqk
        WHERE
            date >= '2020-01-01'
        AND date <= '2020-12-31'
    ) M,
    (
        SELECT
            @sn := 0 ,@rt := 0 ,@ir := 0
    ) t
ORDER BY
    appear DESC

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM