亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL中使用CTE獲取時(shí)間段數(shù)據(jù)的技巧分享

 更新時(shí)間:2024年08月21日 10:46:12   作者:nbsaas-boot  
在數(shù)據(jù)庫(kù)操作中,獲取特定時(shí)間段的數(shù)據(jù)是一項(xiàng)常見(jiàn)任務(wù),MySQL自從8.0版本開(kāi)始支持CTE(公共表表達(dá)式),使得我們可以更加靈活和高效地處理時(shí)間段數(shù)據(jù),本文小編介紹了MySQL中使用CTE獲取時(shí)間段數(shù)據(jù)的技巧分享,需要的朋友可以參考下

引言

在數(shù)據(jù)庫(kù)操作中,獲取特定時(shí)間段的數(shù)據(jù)是一項(xiàng)常見(jiàn)任務(wù)。MySQL自從8.0版本開(kāi)始支持CTE(公共表表達(dá)式),使得我們可以更加靈活和高效地處理時(shí)間段數(shù)據(jù)。本文將介紹如何使用CTE獲取最近十二個(gè)月、最近十二周、最近四個(gè)季度,以及如何獲取十二個(gè)月前的月第一天和十二周前的周第一天。

1. 獲取最近十二個(gè)月

當(dāng)你需要獲取最近十二個(gè)月的月份數(shù)據(jù)時(shí),CTE可以幫助你生成一個(gè)包含這些月份的列表。

WITH RECURSIVE month_12 AS (
    SELECT CURDATE() AS date_day
    UNION ALL
    SELECT DATE_SUB(date_day, INTERVAL 1 MONTH)
    FROM month_12
    WHERE date_day > DATE_SUB(CURDATE(), INTERVAL 11 MONTH)
),
mon_12 AS (
 SELECT DATE_FORMAT(date_day, '%Y-%m') AS label FROM  month_12 ORDER BY date_day desc
)
 
select * from mon_12 

解釋?zhuān)?/h3>
  • 通過(guò) DATE_FORMAT(CURDATE(), '%Y-%m') 獲取當(dāng)前的年份和月份。
  • 使用遞歸的方式生成從當(dāng)前月往前推的十二個(gè)月。
  • 最后,按年份和月份倒序排列,以確保最近的月份排在前面。

2. 獲取最近十二周

如果你需要獲取最近十二周的周數(shù)據(jù),CTE也可以幫助你生成一個(gè)列表,其中每個(gè)條目表示一個(gè)特定的周。

WITH RECURSIVE week_date_12 AS (
    SELECT CURDATE() AS date_day
    UNION ALL
    SELECT DATE_SUB(date_day, INTERVAL 1 week)
    FROM week_date_12
    WHERE date_day > DATE_SUB(CURDATE(), INTERVAL 11 week)
),
week_12 AS (
 SELECT DATE_FORMAT(date_day, '%Y-%u') AS label FROM  week_date_12 ORDER BY date_day desc
)
SELECT label
FROM week_12

解釋?zhuān)?/h3>
  • 通過(guò) YEARWEEK(CURDATE(), 3) 獲取當(dāng)前日期所在的年份和周數(shù)。
  • 遞歸地從當(dāng)前周開(kāi)始,往前推十二周。
  • 結(jié)果按年份和周數(shù)倒序排列,顯示最近的十二周。

3. 獲取最近四個(gè)季度

對(duì)于季度數(shù)據(jù)的處理,MySQL中的CTE可以幫助你生成最近四個(gè)季度的列表。

WITH RECURSIVE last_four_quarters AS (
    SELECT 
        YEAR(CURDATE()) AS year,
        QUARTER(CURDATE()) AS quarter
    UNION ALL
    SELECT 
        CASE 
            WHEN quarter = 1 THEN year - 1 
            ELSE year 
        END,
        CASE 
            WHEN quarter = 1 THEN 4 
            ELSE quarter - 1 
        END
    FROM last_four_quarters
    WHERE year > YEAR(DATE_SUB(CURDATE(), INTERVAL 1 YEAR)) OR quarter > QUARTER(DATE_SUB(CURDATE(), INTERVAL 1 YEAR))
)
SELECT CONCAT(year, '-Q', quarter) AS year_quarter
FROM last_four_quarters
ORDER BY year DESC, quarter DESC;

解釋?zhuān)?/h3>
  • 使用 YEAR(CURDATE()) 和 QUARTER(CURDATE()) 獲取當(dāng)前的年份和季度。
  • 遞歸生成最近四個(gè)季度的數(shù)據(jù),確保季度的轉(zhuǎn)換是正確的(例如,從第一季度到上一年的第四季度)。
  • 最終結(jié)果按年份和季度倒序排列。

4. 獲取十二個(gè)月前的月第一天

當(dāng)你需要獲取十二個(gè)月前的月份的第一天,可以使用以下查詢(xún):

SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 12 MONTH), '%Y-%m-01') AS first_day_of_month;

解釋?zhuān)?/h3>
  • 使用 DATE_SUB(CURDATE(), INTERVAL 12 MONTH) 來(lái)獲取十二個(gè)月前的日期。
  • 通過(guò) DATE_FORMAT(..., '%Y-%m-01') 將這個(gè)日期格式化為該月份的第一天。
select LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 11 MONTH) - INTERVAL 1 MONTH) + INTERVAL 1 DAY

5. 獲取十二周前的周第一天

要獲取十二周前的周第一天(通常是周一),可以使用以下查詢(xún):

SELECT DATE_SUB(DATE_SUB(CURDATE(), INTERVAL 12 WEEK), INTERVAL WEEKDAY(DATE_SUB(CURDATE(), INTERVAL 12 WEEK)) DAY) AS first_day_of_week;

解釋?zhuān)?/h3>
  • DATE_SUB(CURDATE(), INTERVAL 12 WEEK) 計(jì)算十二周前的日期。
  • 使用 WEEKDAY() 函數(shù)計(jì)算該日期對(duì)應(yīng)的周幾(0表示周一,6表示周日)。
  • 最后通過(guò)減去這個(gè)天數(shù),得到十二周前的周一。

結(jié)論

MySQL中的CTE為我們提供了強(qiáng)大的工具來(lái)處理復(fù)雜的時(shí)間段計(jì)算。通過(guò)使用CTE,你可以輕松地生成最近十二個(gè)月、十二周、四個(gè)季度的數(shù)據(jù),還可以精確地獲取特定時(shí)間段的第一天。掌握這些技巧,可以讓你的時(shí)間管理和數(shù)據(jù)處理更加高效、精確,為你的數(shù)據(jù)庫(kù)操作帶來(lái)更大的靈活性和可控性。

以上就是MySQL中使用CTE獲取時(shí)間段數(shù)據(jù)的技巧分享的詳細(xì)內(nèi)容,更多關(guān)于MySQL CTE獲取時(shí)間段數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL頁(yè)面訪問(wèn)統(tǒng)計(jì)及排名情況

    MySQL頁(yè)面訪問(wèn)統(tǒng)計(jì)及排名情況

    這篇文章主要介紹了MySQL頁(yè)面訪問(wèn)統(tǒng)計(jì)及排名情況,涉及到mysql頁(yè)面訪問(wèn)統(tǒng)計(jì),mysql統(tǒng)計(jì)排名相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • mysql root密碼的重設(shè)方法(親測(cè)可用)

    mysql root密碼的重設(shè)方法(親測(cè)可用)

    這篇文章主要介紹了如何重設(shè)mysql root密碼,需要的朋友可以參考下
    2014-02-02
  • 實(shí)戰(zhàn)MySQL升級(jí)的最佳方法

    實(shí)戰(zhàn)MySQL升級(jí)的最佳方法

    這篇文章給大家從理論到實(shí)戰(zhàn)詳細(xì)分享了MySQL升級(jí)的最佳方法,有需要的朋友跟著學(xué)習(xí)操作下吧。
    2017-12-12
  • mysql存儲(chǔ)過(guò)程詳解

    mysql存儲(chǔ)過(guò)程詳解

    我們常用的操作數(shù)據(jù)庫(kù)語(yǔ)言SQL語(yǔ)句在執(zhí)行的時(shí)候需要要先編譯,然后執(zhí)行,而存儲(chǔ)過(guò)程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶(hù)通過(guò)指定存儲(chǔ)過(guò)程的名字并給定參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)調(diào)用執(zhí)行它
    2012-07-07
  • mysql alter語(yǔ)句用法實(shí)例

    mysql alter語(yǔ)句用法實(shí)例

    這里簡(jiǎn)單分享幾個(gè)mysql alter語(yǔ)句用法,方便大家使用
    2013-02-02
  • MySQL更新某個(gè)字段拼接固定字符串的實(shí)現(xiàn)

    MySQL更新某個(gè)字段拼接固定字符串的實(shí)現(xiàn)

    在MySQL中,我們經(jīng)常需要對(duì)數(shù)據(jù)庫(kù)中的某個(gè)字段進(jìn)行更新操作,本文就來(lái)介紹一下MySQL更新某個(gè)字段拼接固定字符串的實(shí)現(xiàn),感興趣的可以了解一下
    2025-04-04
  • 使用mysql查詢(xún)當(dāng)天、近一周、近一個(gè)月及近一年的數(shù)據(jù)

    使用mysql查詢(xún)當(dāng)天、近一周、近一個(gè)月及近一年的數(shù)據(jù)

    不論你是一名數(shù)據(jù)庫(kù)管理員或SQL開(kāi)發(fā)者,還是一名簡(jiǎn)單的MySQL用戶(hù),掌握查詢(xún)特定日期數(shù)據(jù)的方法都是必不可少的,下面這篇文章主要給大家介紹了關(guān)于如何使用mysql查詢(xún)當(dāng)天、近一周、近一個(gè)月及近一年的數(shù)據(jù),需要的朋友可以參考下
    2023-06-06
  • 適合新手的mysql日期類(lèi)型轉(zhuǎn)換實(shí)例教程

    適合新手的mysql日期類(lèi)型轉(zhuǎn)換實(shí)例教程

    Mysql作為一款開(kāi)元的免費(fèi)關(guān)系型數(shù)據(jù)庫(kù),用戶(hù)基礎(chǔ)非常龐大,下面這篇文章主要給大家介紹了關(guān)于mysql日期類(lèi)型轉(zhuǎn)換的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • 跟著hsp一步步學(xué)mysql優(yōu)化的方法

    跟著hsp一步步學(xué)mysql優(yōu)化的方法

    本篇文章小編為大家介紹,跟著hsp一步步學(xué)mysql優(yōu)化的方法。需要的朋友參考下
    2013-04-04
  • MySQL數(shù)據(jù)庫(kù)基礎(chǔ)篇SQL窗口函數(shù)示例解析教程

    MySQL數(shù)據(jù)庫(kù)基礎(chǔ)篇SQL窗口函數(shù)示例解析教程

    這篇文章主要為大家介紹了MySQL數(shù)據(jù)庫(kù)基礎(chǔ)篇之窗口函數(shù)示例解析教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10

最新評(píng)論