有没有办法将介于两个日期之间的记录分组?
例如,我的表中有如下记录:

rid     stamp                   uid
25      2005-07-05 14:10:29     25
1175    2005-08-12 15:47:35     29
290     2005-11-22 16:38:53     42
30      2005-12-01 10:48:12     47
30      2006-01-02 17:34:28     52
30      2006-02-06 22:11:35     57
30      2006-04-17 15:10:19     59
1195    2006-05-08 21:55:56     62
100     2006-06-30 15:51:04     94
45      2006-07-03 21:14:37     24

我正在尝试编写一个查询,该查询将按年返回February - August月份之间和September - January之间的记录计数,因此我得到的结果是:
July 2005 - January 2006:      3
February 2006 - August 2006:   5

最佳答案

你可以在任何你想去的地方分组。如果你能在一个专栏里找到你想要的东西,你可以在上面分组。因此,在两个周期内,你可以简单地分组一个if:

SELECT * FROM table
GROUP BY if(stamp between "2005-07-01" and "2006-02-01", 0, 1)

如果您需要时段的范围超过较长的时间(多年),可以使用period_diff来区分:
SELECT * FROM table
GROUP BY floor(period_diff( DATE_FORMAT(stamp, "%Y%m"), "200507") / 6)

它将以年-月格式给出在日期和开始期间之间传递的6个月块的数目。

10-08 00:47