【发布时间】:2016-08-23 16:07:28
【问题描述】:
我需要在过去 3 年中逐月获得结果。这就是我所拥有的:
CREATE DEFINER=`root`@`localhost` PROCEDURE `by_year`()
BEGIN
DROP TEMPORARY TABLE IF EXISTS aaa;
SET @year = 2014;
WHILE @year <= YEAR(CURDATE()) DO
CREATE TEMPORARY TABLE IF NOT EXISTS aaa (Año int, Registrados int, Activos int, Compraron int, Recurrentes int);
INSERT INTO aaa
SELECT @year, registrados.count, activos.count, compraron.count, recurrentes.count FROM
# Here is my query to get the data. With a WHERE that limits the creation date by @year. [YEAR(AU.created) <= @year] For example
END WHILE;
SELECT * FROM aaa;
END
它可以工作多年。但我需要几个月甚至几周甚至几天才能得到结果。
我的问题是,如果我用 MONTH 或 DAY 替换 YEAR 函数,这些函数将返回一个从字面上取自日期的数字(相对于更大的分隔符)
例如来自
MONTH('2015-11-25')
我明白了
11
所以 MONTH('2015-11-25') 等于 MONTH('2016-11-02')
我看到了两种方法......我找到了一个函数或类似的东西:
MONTH_FROM_THE_BEGGINING_OF_TIMES('2016-11-02')
与 TIME 处理的日期类似,在这种情况下,通常从第 1 年返回月份数,应该类似于 (2015 * 12) + 11 = 24191
另一种方法是使用双 WHILE。然后连续几天三倍。这将产生 O(n^3) 的复杂度,这是不好的。
非常欢迎任何想法。
谢谢
【问题讨论】:
-
我不明白你在做什么。您是否尝试按月获取过去 3 年的某种总价值?
-
正确。 @Bill Karwin 给了我答案:D