缓存 Mysql 中的月底和月初。 Mysql Node.js 中的变量重新定义

Caching ending and beginning of month in Mysql. Mysql variables redefinition in Node.js

我正在编写一个统计应用程序,我需要查询数据库以获取客户的月收入,因此我需要查看每个订阅在那个月有多少天。问题是我需要告诉他上个月的开始和结束,由于时钟差异,我无法发送我的系统时间。它必须是它自己的。我不能使用 Mysql 中的变量,因为它会受到多个查询的影响,而且据我所知,它们可能会被覆盖并导致错误。

SELECT GREATEST ( LEAST ( x.period_end, y.period_end) - GREATEST ( x.period_start, y.period_start), 0 ) 
from customer_invoice x, (SELECT DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 MONTH), '%Y-%m-01') AS period_start, 
LAST_DAY(DATE_ADD(NOW(), INTERVAL -1 MONTH)) AS period_end) y;

我想知道有没有办法明确告诉Mysql计算一次'y'并使用它。或者,如果我可以告诉他使用与单个 Mysql 请求相对应的变量。

我正在使用 Mysql 的包装器,覆盖了 Node.js 的标准包装器,据我所知,如果一个查询定义了一个变量并正在执行,而另一个查询出现并试图定义具有相同名称的变量会覆盖第一个破坏第一个查询的变量。我可以为每个变量使用自定义哈希名称,但我不想去那里。

做一次:

SELECT @foo := this + that,
       @bar := other * stuff;

根据需要经常使用这些@variables:

SELECT ... @foo ... @bar .. @foo

它们将在会话结束时丢失(当您断开连接时)。

附录

@variables 是会话本地的(即连接本地的)。所以每个连接都可以使用不同的值。