1. 程式人生 > >【mysql】查詢本月和去年同期資料SQL

【mysql】查詢本月和去年同期資料SQL

思路

  1. 首先將資料來源中的日期欄位,使用日期格式化函式,格式化為Y-M的形式
  2. 增加一列,使用日期格式化函式,獲取去年的月份資訊,命名為LAST_DATE
  3. 對同一個檢視,進行左連線,獲取當月的金額以及去年該月份的金額

實現關鍵程式碼

生成中間檢視:

SELECT
    sum(`c`.`DISTRIBUTION_MONEY_`) AS `C_MONEY_`,
    `c`.`BRAND_TYPE_` AS `C_TYPE_`,
    (
        CASE
        WHEN (
            (`c`.`CITY_` = '咸陽市')
            OR
(`c`.`CITY_` = '寶雞市') OR (`c`.`CITY_` = '漢中市') OR (`c`.`CITY_` = '安康市') ) THEN '寶雞' WHEN ( (`c`.`CITY_` = '渭南市') OR (`c`.`CITY_` = '商洛市') OR (`c`.`CITY_` = '榆林市') OR (`c`.`CITY_` = '延安市') ) THEN '渭南' ELSE
'西安' END ) AS `C_RESION_`, date_format( ( `c`.`SIGNING_DATE_` - INTERVAL 1 YEAR ), '%Y-%m' ) AS `C_LAST_DATE_`, date_format( `c`.`SIGNING_DATE_`, '%Y-%m' ) AS `C_DATE_` FROM `t_import_contract_detail` `c
` WHERE (1 = 1) GROUP BY `c`.`BRAND_TYPE_`, `C_RESION_`, `C_DATE_`

核心程式碼:

date_format(
        (
            `c`.`SIGNING_DATE_` - INTERVAL 1 YEAR
        ),
        '%Y-%m'
    ) AS `C_LAST_DATE_`,
    date_format(
        `c`.`SIGNING_DATE_`,
        '%Y-%m'
    ) AS `C_DATE_`

使用左連線,從而獲取本月的去年同期資料

SELECT
    `a`.`C_TYPE_` AS `C_TYPE_`,
    `a`.`C_RESION_` AS `C_RESION_`,
    `a`.`C_DATE_` AS `C_DATE_`,
    `a`.`C_MONEY_` AS `C_MONEY_`,
    `a`.`C_LAST_DATE_` AS `C_LAST_DATE_`,
    `b`.`C_MONEY_` AS `C_LAST_MONEY`
FROM
    (
        `v_chart_contract` `a`
        LEFT JOIN `v_chart_contract` `b` ON (
            (
                (
                    `a`.`C_LAST_DATE_` = `b`.`C_DATE_`
                )
                AND (
                    `a`.`C_RESION_` = `b`.`C_RESION_`
                )
                AND (
                    `a`.`C_TYPE_` = `b`.`C_TYPE_`
                )
            )
        )
    )

核心程式碼:

a`.`C_LAST_DATE_` = `b`.`C_DATE_`

效果

這裡寫圖片描述