Mysql gets the date of the last 7 days, 7 weeks, July, and 7 years, according to the current time to get the date of the last 7 days, 7 weeks, July, and 7 years, and gets the date of the last day of each month in recent months

Mysql gets the dates of the last 7 days, 7 weeks, July, and 7 years, and even the current time Gets the dates of the last 7 days, 7 weeks, July, and 7 years. Without further ado, just look at Figure 1: get according to the maximum time in
the
table Last 7 days date

SELECT
        DATE_FORMAT(creattime, "%Y-%m-%d") b
    FROM t_stock_realtime_inventory
    WHERE
          DATE_FORMAT(creattime, "%Y-%m-%d") > (
      SELECT DATE_FORMAT(DATE_SUB((SELECT MAX(creattime) FROM t_stock_realtime_inventory), INTERVAL 7 DAY ),
                         "%Y-%m-%d") a
    GROUP BY a )
    GROUP BY
      b
    ORDER BY
      b ASC

1.1 Obtain the date of the last 7 days according to the current time

SELECT
      date_sub( curdate( ), INTERVAL 7 DAY ) AS a UNION
      SELECT
      date_sub( curdate( ), INTERVAL 6 DAY ) AS a UNION
      SELECT
      date_sub( curdate( ), INTERVAL 5 DAY ) AS a UNION
      SELECT
      date_sub( curdate( ), INTERVAL 4 DAY ) AS a UNION
      SELECT
      date_sub( curdate( ), INTERVAL 3 DAY ) AS a UNION
      SELECT
      date_sub( curdate( ), INTERVAL 2 DAY ) AS a UNION
      SELECT
      date_sub( curdate( ), INTERVAL 1 DAY ) AS a
      FROM DUAL

2. Get the date of the last 7 weeks according to the maximum time in the table

SELECT WEEK(creattime, 1) a
    FROM t_stock_realtime_inventory
    WHERE WEEK(creattime, 1) > (SELECT WEEK((SELECT MAX(creattime) FROM t_stock_realtime_inventory), 1)) - 7
    GROUP BY a
    ORDER BY a ASC

2.1 Obtain the date of the last 7 weeks according to the current time

SELECT
      week(date_sub( curdate( ), INTERVAL 6 week ),1) AS a UNION
      SELECT
      week(date_sub( curdate( ), INTERVAL 5 week ),1) AS a UNION
      SELECT
      week(date_sub( curdate( ), INTERVAL 4  week),1) AS a UNION
      SELECT
      week(date_sub( curdate( ), INTERVAL 3 week ),1) AS a UNION
      SELECT
      WEEK(date_sub( curdate( ), INTERVAL 2 week ),1) AS a UNION
      SELECT
      week(date_sub( curdate( ), INTERVAL 1 week ),1) AS a UNION
      SELECT
      week( curdate( ), 1) AS a FROM DUAL

2.2 Get nearly 7 weeks, every week data

SELECT
	D.dict_label lspzmc,
	D.dict_value lspzid,
CASE WHEN T.ccl IS NULL THEN 0 ELSE ROUND( SUM( T.CCL ), 4 ) END ccl 
FROM
	sys_dict_data D
	LEFT JOIN (
	SELECT
		b.dic_desc lspzmc,
		WEEK ( creat_time, 1 ) creat_time,
		 CASE WHEN sum( t.storage_qty ) IS NULL THEN 0 ELSE sum( t.storage_qty ) END ccl 
	FROM
		`t_stock_history` t
		INNER JOIN t_sys_dic b ON t.foodstuff_varieties_id = b.dic_id 
		WHERE
		DATE_SUB( CURDATE( ), INTERVAL 49 DAY ) <= DATE( t.creat_time ) --7周内的数据故为 49
		AND WEEK ( creat_time, 1 ) = 17 -- 等于多少周
	GROUP BY
		b.dic_desc,
		creat_time 
	ORDER BY
		ccl DESC 
	) T ON T.lspzmc = D.dict_label 
WHERE
	dict_type = 'lslx' 
GROUP BY
	D.dict_label,
	D.dict_value

3. Get the date of the last July according to the maximum time in the table

SELECT
      DATE_FORMAT(creattime, "%Y-%m") b
    FROM t_stock_realtime_inventory
    WHERE
        DATE_FORMAT(creattime, "%Y-%m") > (
        SELECT DATE_FORMAT(DATE_SUB((SELECT MAX(creattime) FROM t_stock_realtime_inventory), INTERVAL 7 MONTH ),
                           "%Y-%m") a
    GROUP BY a )
    GROUP BY
      b
    ORDER BY
      b ASC

3.1 Obtain the latest July date according to the current time

SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 6 month),"%Y-%m") UNION
      SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 5 month),"%Y-%m") UNION
      SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 4 month),"%Y-%m") UNION
      SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 3 month),"%Y-%m") UNION
      SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 2 month),"%Y-%m") UNION
      SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 month),"%Y-%m") UNION
      select DATE_FORMAT(NOW(),"%Y-%m") FROM DUAL

4. Obtain the date of the last 7 years according to the maximum time in the table

SELECT DATE_FORMAT(creattime, "%Y") b
    FROM t_stock_realtime_inventory
    WHERE DATE_FORMAT(creattime, "%Y") > (
      SELECT DATE_FORMAT(DATE_SUB((SELECT MAX(creattime) FROM t_stock_realtime_inventory), INTERVAL 7 YEAR ), "%Y") a
    GROUP BY a )
    GROUP BY
      b
    ORDER BY
      b ASC

4.1 Obtain the date of the last 7 years according to the current time

SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 6 YEAR),"%Y") UNION
      SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 5 YEAR),"%Y") UNION
      SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 4 YEAR),"%Y") UNION
      SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 3 YEAR),"%Y") UNION
      SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 2 YEAR),"%Y") UNION
      SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 YEAR),"%Y") UNION
      select DATE_FORMAT(NOW(),"%Y") FROM DUAL

For reference, you can modify the parameter query according to your own business logic

5. Get the date of the last day of each month in recent months

SELECT date_format(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())-10, 0)),'yyyy-MM-dd')
union all
SELECT date_format(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())-9, 0)),'yyyy-MM-dd')
union all
SELECT date_format(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())-8, 0)),'yyyy-MM-dd')
union all
SELECT date_format(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())-7, 0)),'yyyy-MM-dd')
union all
SELECT date_format(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())-6, 0)),'yyyy-MM-dd')
union all
SELECT date_format(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())-5, 0)),'yyyy-MM-dd')
union all
SELECT date_format(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())-4, 0)),'yyyy-MM-dd')
union all
SELECT date_format(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())-3, 0)),'yyyy-MM-dd')
union all
SELECT date_format(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())-2, 0)),'yyyy-MM-dd')
union all
SELECT date_format(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())-2, 0)),'yyyy-MM-dd')
union all
SELECT date_format(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()), 0)),'yyyy-MM-dd')
union all
select date_format(now(),'yyyy-MM-dd')

Guess you like

Origin blog.csdn.net/weixin_51114236/article/details/124411504