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