mysql - 创建具有相对日期的 MYSQL 查询

标签 mysql sql

我有一个每月更新的 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/

相关文章:

mysql - 卡在 SQL 查询上

mysql - 此错误是什么意思以及如何修复它 "Error in saving to database. error is: The method or operation is not implemented"?

MySQL/PHP 自动提示

sql - MySQL 中给定用户的最新行

sql - 在 SQL Server 中计算 XML 中的非空节点数

mysql - SQL:选择列值从上一行更改的行

两个表的 SQL 查询自连接

mysql - 仅当记录存在时才从连接表中选择

sql - 奇怪的 : Planner takes decision with lower cost, 但(非常)查询运行时间长

sql - 数据库结果的可变结构