我有一个每月更新的 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)
可能吗?
谢谢,我希望我已经说清楚了。
最佳答案
好吧,我还没有尝试过,但我相信它应该有效
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
进行比较的部分,但我相信它应该仍然可以正常工作。
如果它给出任何错误,我相信它应该与缺少引用或其他内容有关,您应该能够调试这些错误。
希望它能起作用。 请让我知道结果。
关于mysql - 创建具有相对日期的 MYSQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51904307/