【发布时间】:2013-01-07 10:20:29
【问题描述】:
我之前问过的series of dates with a specified interval can be generated using a variable and a static date as per the linked question。但是,当有 where 子句生成开始日期时,dates generation 似乎停止并且只显示第一个间隔日期。我还检查了其他帖子,我发现 e.g. 1、e.g. 2、e.g. 3 显示为 static date 或使用 CTE.. 我正在寻找一个解决方案 没有 storedprocedures/functions...
这行得通:
SELECT DATE(DATE_ADD('2012-01-12',
INTERVAL @i:=@i+30 DAY) ) AS dateO
FROM members, (SELECT @i:=0) r
where @i < DATEDIFF(now(), date '2012-01-12')
;
这些不:
SELECT DATE_ADD(date '2012-01-12',
INTERVAL @j:=@j+30 DAY) AS dateO, @j
FROM `members`, (SELECT @j:=0) s
where @j <= DATEDIFF(now(), date '2012-01-12')
and mmid = 100
;
SELECT DATE_ADD(stdate,
INTERVAL @k:=@k+30 DAY) AS dateO, @k
FROM `members`, (SELECT @k:=0) t
where @k <= DATEDIFF(now(), stdate)
and mmid = 100
;
预期结果:
与第一个查询结果相同,因为它开始生成日期为 stDate 的 mmid=100。
最好在ANSI SQL 中支持,因为Oracle has trunc and rownum given per this query with 14 votes 和PostGres 具有generatge_Series 功能。 我想知道这是MYSQL 中的错误还是限制?
PS:我之前也问过类似的问题。它基于static date values,因为它基于基于条件的表列中的日期值。
【问题讨论】:
-
如果您在 WHERE 子句中使用
and mmid = 100,您将获得从 mmid = 100 的行派生的单行。真的想做什么?显示两个日期之间每 30 天间隔的日期? -
我想为从开始日期到现在的每个成员生成 10 天的间隔。 30 天只是 10 天的一个例子。您可以在我的表格中看到每个成员的日期。因此,对于 10 个成员,我需要 10 个不同且单独的日期集,在我的情况下,每个开始日期都是唯一的。如果您需要进一步说明,请告诉我。我什至尝试使用通过选择进入查询设置的变量来分配开始日期。它只是不起作用。
-
@JW。您的 SQL 技能令人钦佩。你能分享一些关于如何快速使用 SQLFiddle 以及快速拍摄 qeries(包括非常容易到高级的)的技巧吗?您是在几个月内才拿起它,还是它是如何达到这个速度的:)?谢谢。