我有一个每月更新的mysql查询,并且希望有一个自动更新的查询。 当前查询是:
SELECT SUM((pm.meta_value = '0' AND p.post_status = 'wc-active') or pm.meta_value > '2018-10-01 23:59:59') AS SEPTEMBER,
SUM((pm.meta_value = '0' AND p.post_status = 'wc-active') or pm.meta_value > '2018-10-01 23:59:59') AS OCTOBER,
SUM((pm.meta_value = '0' AND p.post_status = 'wc-active') or pm.meta_value > '2018-11-01 23:59:59') AS NOVEMBER
FROM simp_posts p INNER JOIN
simp_postmeta pm
ON p.ID = pm.post_id
WHERE pm.meta_key = '_schedule_end' AND
p.post_status IN ('wc-active', 'wc-pending-cancel')
该查询的结果如下:
September October November
242 227 214
每个月我都会更改“ pm.meta_value>”和AS之后的日期。 我想要的是用:
替换此硬编码的日期first day of next month (+1) at 23:59:59 AS MMMM (next month in all letters)
first day of next month (+2) at 23:59:59 AS MMMM (next month in all letters)
first day of next month (+3) at 23:59:59 AS MMMM (next month in all letters)
有可能吗?
谢谢,我希望我已经清楚了。
答案 0 :(得分:2)
好,所以我没有尝试过,但是我相信它应该可以工作
SET @firstMonthDate = DATE_ADD(LAST_DAY(NOW()), INTERVAL 2 DAY);
SET @firstMonthName = UPPER(DATE_FORMAT(@firstMonthDate, '%M'));
SET @secondMonthDate = DATE_ADD(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)), INTERVAL 2 DAY);
SET @secondMonthName = UPPER(DATE_FORMAT(@secondMonthDate, '%M'));
SET @thirdMonthDate = DATE_ADD(LAST_DAY(DATE_ADD(NOW(), INTERVAL 2 MONTH)), INTERVAL 2 DAY);
SET @thirdMonthName = UPPER(DATE_FORMAT(@thirdMonthDate, '%M'));
SET @query = concat("SELECT SUM((pm.meta_value = '0' AND p.post_status = 'wc-active') or pm.meta_value >= ",@firstMonthDate,") AS ",@firstMonthName,",
SUM((pm.meta_value = '0' AND p.post_status = 'wc-active') or pm.meta_value >= ",@secondMonthDate,") AS ",@secondMonthName,",
SUM((pm.meta_value = '0' AND p.post_status = 'wc-active') or pm.meta_value >= ",@thirdMonthDate,") AS ",@thirdMonthName,"
FROM simp_posts p INNER JOIN
simp_postmeta pm
ON p.ID = pm.post_id
WHERE pm.meta_key = '_schedule_end' AND
p.post_status IN ('wc-active', 'wc-pending-cancel')");
PREPARE stmt FROM @query;
EXECUTE stmt;
因此,我们将接下来三个月的名称和日期转换为变量,然后从中创建查询字符串,然后执行stmt。
我更改了您与23:59:59> date
进行比较的部分,但是我认为它应该仍然可以正常工作。
如果出现任何错误,我认为应该是与缺少引号有关的内容或应该调试的东西。
希望它能起作用。 让我知道结果。