最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

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

1. 獲取最近十二個月

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

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 

解釋:

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

2. 獲取最近十二周

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

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

解釋:

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

3. 獲取最近四個季度

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

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;

解釋:

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

4. 獲取十二個月前的月第一天

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

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

解釋:

  • 使用 DATE_SUB(CURDATE(), INTERVAL 12 MONTH) 來獲取十二個月前的日期。
  • 通過 DATE_FORMAT(..., '%Y-%m-01') 將這個日期格式化為該月份的第一天。
select LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 11 MONTH) - INTERVAL 1 MONTH) + INTERVAL 1 DAY

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

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

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

解釋:

  • DATE_SUB(CURDATE(), INTERVAL 12 WEEK) 計(jì)算十二周前的日期。
  • 使用 WEEKDAY() 函數(shù)計(jì)算該日期對應(yīng)的周幾(0表示周一,6表示周日)。
  • 最后通過減去這個天數(shù),得到十二周前的周一。

結(jié)論

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

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

相關(guān)文章

  • MySQL中的唯一性約束與NULL詳解

    MySQL中的唯一性約束與NULL詳解

    這里記錄的是很久之前的一個 bug 了,主要給大家介紹了關(guān)于MySQL中唯一性約束與NULL的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • percona-toolkit之pt-kill 殺掉mysql查詢或連接的方法

    percona-toolkit之pt-kill 殺掉mysql查詢或連接的方法

    本文主要描述了percona-toolkit中pt-kill的 使用實(shí)例 ,及 一些重要參數(shù)的介紹,需要的朋友可以參考下
    2016-04-04
  • 深入理解MySQL深分頁慢問題及性能優(yōu)化

    深入理解MySQL深分頁慢問題及性能優(yōu)化

    本文主要介紹了深入理解MySQL深分頁慢問題及性能優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • MySQL事務(wù)機(jī)制和隔離級別使用方式

    MySQL事務(wù)機(jī)制和隔離級別使用方式

    MySQL事務(wù)通過ACID特性保障數(shù)據(jù)一致性,隔離級別(讀未提交、讀已提交、可重復(fù)讀、串行化)平衡并發(fā)性能與數(shù)據(jù)安全,InnoDB默認(rèn)使用可重復(fù)讀,依賴MVCC避免臟讀和不可重復(fù)讀,間隙鎖減少幻讀,需根據(jù)場景權(quán)衡一致性與性能
    2025-09-09
  • 提升MYSQL查詢效率的10個SQL語句優(yōu)化技巧

    提升MYSQL查詢效率的10個SQL語句優(yōu)化技巧

    MySQL數(shù)據(jù)庫執(zhí)行效率對程序的執(zhí)行速度有很大的影響,有效的處理優(yōu)化數(shù)據(jù)庫是非常有用的。尤其是大量數(shù)據(jù)需要處理的時候
    2018-03-03
  • Navicat連接MySQL8.0的正確方法(親測有效)

    Navicat連接MySQL8.0的正確方法(親測有效)

    navicat是一款非常強(qiáng)大的數(shù)據(jù)庫可視化操作軟件,程序開發(fā)中經(jīng)常會用到navicat,下面這篇文章主要給大家介紹了關(guān)于Navicat連接MySQL8.0的正確方法,需要的朋友可以參考下
    2022-06-06
  • mysql服務(wù)啟動不了解決方案

    mysql服務(wù)啟動不了解決方案

    最近在Windows 2003上的MySQL出現(xiàn)過多次正常運(yùn)行時無法連接數(shù)據(jù)庫故障,現(xiàn)象是無法連接數(shù)據(jù)庫,也無法停止MySQL或重啟MYSQL,由于每次都是草草嘗試各種方法搞定即可本文將詳細(xì)介紹解決方法
    2012-11-11
  • mysql安裝配置方法圖文教程(CentOS7)

    mysql安裝配置方法圖文教程(CentOS7)

    這篇文章主要為大家詳細(xì)介紹了centos7下mysql安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • MySQL復(fù)合查詢和表的內(nèi)外連接示例詳解

    MySQL復(fù)合查詢和表的內(nèi)外連接示例詳解

    在數(shù)據(jù)庫管理和數(shù)據(jù)分析中,單表查詢往往無法滿足復(fù)雜的數(shù)據(jù)查詢需求,因此多表查詢和子查詢成為了解決問題的關(guān)鍵技術(shù),MySQL支持多種多表查詢方式,如內(nèi)連接、外連接(左外連接和右外連接)以及自連接,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • mysql 5.7.23 安裝配置方法圖文教程

    mysql 5.7.23 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.23安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09

最新評論

新乡市| 道真| 当阳市| 江孜县| 普安县| 台北县| 翁源县| 黄浦区| 宜阳县| 苏州市| 大新县| 澄城县| 新巴尔虎右旗| 晋江市| 喀什市| 手游| 宁强县| 济宁市| 奇台县| 牡丹江市| 镇赉县| 彝良县| 门头沟区| 铁岭市| 翁源县| 泾阳县| 同德县| 梅河口市| 内丘县| 华池县| 同仁县| 渝中区| 汶川县| 巴林左旗| 西平县| 安阳市| 循化| 新密市| 凌海市| 仁寿县| 兴安盟|