mysql 统计表里面6个月的数据
1:表格数据
SELECT
'serial_1' as '表名',
MAX(IF(c.month = '2022-03', c.count, NULL)) AS '2022-03',
MAX(IF(c.month = '2022-04', c.count, NULL)) AS '2022-04',
MAX(IF(c.month = '2022-05', c.count, NULL)) AS '2022-05',
MAX(IF(c.month = '2022-06', c.count, NULL)) AS '2022-06',
MAX(IF(c.month = '2022-07', c.count, NULL)) AS '2022-07',
MAX(IF(c.month = '2022-08', c.count, NULL)) AS '2022-08'
FROM
(
select
DATE_FORMAT(event.create_date, '%Y-%m') as month,
count(1) as count
from
serial_1 event
where
ISNULL(event.item_code)
GROUP BY
DATE_FORMAT(event.create_date, '%Y-%m')
order by
DATE_FORMAT(event.create_date, '%Y-%m') desc
limit 6 ) c
union all
SELECT
'container_1' as '表名',
MAX(IF(c.month = '2022-03', c.count, NULL)) AS '2022-03',
MAX(IF(c.month = '2022-04', c.count, NULL)) AS '2022-04',
MAX(IF(c.month = '2022-05', c.count, NULL)) AS '2022-05',
MAX(IF(c.month = '2022-06', c.count, NULL)) AS '2022-06',
MAX(IF(c.month = '2022-07', c.count, NULL)) AS '2022-07',
MAX(IF(c.month = '2022-08', c.count, NULL)) AS '2022-08'
FROM
(
select
DATE_FORMAT(event.create_date, '%Y-%m') as month,
count(1) as count
from
container_1 event
where
ISNULL(event.item_code)
GROUP BY
DATE_FORMAT(event.create_date, '%Y-%m')
order by
DATE_FORMAT(event.create_date, '%Y-%m') desc
limit 6 ) c
union all
SELECT
'reel_1' as '表名',
MAX(IF(c.month = '2022-03', c.count, NULL)) AS '2022-03',
MAX(IF(c.month = '2022-04', c.count, NULL)) AS '2022-04',
MAX(IF(c.month = '2022-05', c.count, NULL)) AS '2022-05',
MAX(IF(c.month = '2022-06', c.count, NULL)) AS '2022-06',
MAX(IF(c.month = '2022-07', c.count, NULL)) AS '2022-07',
MAX(IF(c.month = '2022-08', c.count, NULL)) AS '2022-08'
FROM
(
select
DATE_FORMAT(event.create_date, '%Y-%m') as month,
count(1) as count
from
reel_1 event
where
ISNULL(event.item_code)
GROUP BY
DATE_FORMAT(event.create_date, '%Y-%m')
order by
DATE_FORMAT(event.create_date, '%Y-%m') desc
limit 6 ) c
union all
SELECT
'batch_1' as '表名',
MAX(IF(c.month = '2022-03', c.count, NULL)) AS '2022-03',
MAX(IF(c.month = '2022-04', c.count, NULL)) AS '2022-04',
MAX(IF(c.month = '2022-05', c.count, NULL)) AS '2022-05',
MAX(IF(c.month = '2022-06', c.count, NULL)) AS '2022-06',
MAX(IF(c.month = '2022-07', c.count, NULL)) AS '2022-07',
MAX(IF(c.month = '2022-08', c.count, NULL)) AS '2022-08'
FROM
(
select
DATE_FORMAT(event.create_date, '%Y-%m') as month,
count(1) as count
from
batch_1 event
where
ISNULL(event.item_code)
GROUP BY
DATE_FORMAT(event.create_date, '%Y-%m')
order by
DATE_FORMAT(event.create_date, '%Y-%m') desc
limit 6 ) c
2:统计最近6个月的数据,基数是前6个月之前数据之合,后6个月的数据就是每月的数据+基数
select d.month , sum(num) as num from (
SELECT
a.month,
IFNULL(b.num + (select count(1) from batch_1 where ISNULL(item_code) and create_date < DATE_SUB(CURDATE(), INTERVAL 5 MONTH)), 0 + (select count(1) from batch_1 where ISNULL(item_code) and create_date < DATE_SUB(CURDATE(), INTERVAL 5 MONTH))) AS num
FROM
(
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 4 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 2 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(CURDATE(), '%Y-%m') AS month ) a
LEFT JOIN (
SELECT
DATE_FORMAT(create_date, '%Y-%m') AS DATETIME,
count(1) AS num
FROM
batch_1
WHERE
ISNULL(item_code)
GROUP BY
DATE_FORMAT(create_date, '%Y-%m') ) b ON
a.month = b.datetime
UNION ALL
SELECT
a.month,
IFNULL(b.num + (select count(1) from reel_1 where ISNULL(item_code) and create_date < DATE_SUB(CURDATE(), INTERVAL 5 MONTH)), 0 +(select count(1) from reel_1 where ISNULL(item_code) and create_date < DATE_SUB(CURDATE(), INTERVAL 5 MONTH))) AS num
FROM
(
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 4 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 2 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(CURDATE(), '%Y-%m') AS month ) a
LEFT JOIN (
SELECT
DATE_FORMAT(create_date, '%Y-%m') AS DATETIME,
count(1) AS num
FROM
reel_1
WHERE
ISNULL(item_code)
GROUP BY
DATE_FORMAT(create_date, '%Y-%m') ) b ON
a.month = b.datetime
UNION ALL
SELECT
a.month,
IFNULL(b.num + (select count(1) from container_1 where ISNULL(item_code) and create_date < DATE_SUB(CURDATE(), INTERVAL 5 MONTH)), 0 +(select count(1) from container_1 where ISNULL(item_code) and create_date < DATE_SUB(CURDATE(), INTERVAL 5 MONTH))) AS num
FROM
(
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 4 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 2 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(CURDATE(), '%Y-%m') AS month ) a
LEFT JOIN (
SELECT
DATE_FORMAT(create_date, '%Y-%m') AS DATETIME,
count(1) AS num
FROM
container_1
WHERE
ISNULL(item_code)
GROUP BY
DATE_FORMAT(create_date, '%Y-%m') ) b ON
a.month = b.datetime
UNION ALL
SELECT
a.month,
IFNULL(b.num + (select count(1) from serial_1 where ISNULL(item_code) and create_date < DATE_SUB(CURDATE(), INTERVAL 5 MONTH)), 0 +(select count(1) from serial_1 where ISNULL(item_code) and create_date < DATE_SUB(CURDATE(), INTERVAL 5 MONTH))) AS num
FROM
(
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 4 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 2 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m') AS month
UNION ALL
SELECT
DATE_FORMAT(CURDATE(), '%Y-%m') AS month ) a
LEFT JOIN (
SELECT
DATE_FORMAT(create_date, '%Y-%m') AS DATETIME,
count(1) AS num
FROM
serial_1
WHERE
ISNULL(item_code)
GROUP BY
DATE_FORMAT(create_date, '%Y-%m') ) b ON
a.month = b.datetime
) d
GROUP BY d.month
3:
SELECT
'batch_1' as 'table',
a.month,IFNULL(b.num,0) AS num
FROM (
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH),'%Y-%m') AS month
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 4 MONTH),'%Y-%m') AS month
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH),'%Y-%m') AS month
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 2 MONTH),'%Y-%m') AS month
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH),'%Y-%m') AS month
UNION ALL
SELECT DATE_FORMAT(CURDATE(),'%Y-%m') AS month
) a LEFT JOIN (
SELECT DATE_FORMAT(create_date,'%Y-%m') AS DATETIME, count(1) AS num
FROM batch_1
WHERE ISNULL(item_code)
GROUP BY DATE_FORMAT(create_date,'%Y-%m')
) b ON a.month = b.datetime
UNION ALL
SELECT
'reel_1' as 'table',
a.month,IFNULL(b.num,0) AS num
FROM (
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH),'%Y-%m') AS month
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 4 MONTH),'%Y-%m') AS month
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH),'%Y-%m') AS month
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 2 MONTH),'%Y-%m') AS month
UNION ALL
SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH),'%Y-%m') AS month
UNION ALL
SELECT DATE_FORMAT(CURDATE(),'%Y-%m') AS month
) a LEFT JOIN (
SELECT DATE_FORMAT(create_date,'%Y-%m') AS DATETIME, count(1) AS num
FROM reel_1
WHERE ISNULL(item_code)
GROUP BY DATE_FORMAT(create_date,'%Y-%m')
) b ON a.month = b.datetime