我有一組或多組記錄,並且我想對它們進行計數並將它們組合在一定範圍內,例如,我想,以計算團體創建的X天X天範圍內的組
e.g. SELECT COUNT(*) FROM `table` GROUP BY /*`created` 3 days/*
我有一組或多組記錄,並且我想對它們進行計數並將它們組合在一定範圍內,例如,我想,以計算團體創建的X天X天範圍內的組
e.g. SELECT COUNT(*) FROM `table` GROUP BY /*`created` 3 days/*
,你可以這樣做
SELECT COUNT(*) FROM table GROUP BY FLOOR(created/3)
記錄......我想。
雖然如果created
是日期字段,你必須做一些更拉坯得到它變成一個數值這個工作。
以下是帶日期的示例。
create table t1(created date not null);
insert
into t1(created) values (date '2011-01-09')
,(date '2011-01-10')
,(date '2011-01-11')
,(date '2011-01-12')
,(date '2011-01-13')
,(date '2011-01-14')
,(date '2011-01-15')
,(date '2011-01-16')
,(date '2011-01-17')
,(date '2011-01-18')
,(date '2011-01-19')
,(date '2011-01-20');
select floor(datediff(now(), created)/3) * 3 as days_ago
,min(created)
,max(created)
,count(*)
from t1
group
by floor(datediff(now(), created)/3);
+----------+--------------+--------------+----------+
| days_ago | min(created) | max(created) | count(*) |
+----------+--------------+--------------+----------+
| 0 | 2011-01-18 | 2011-01-20 | 3 |
| 3 | 2011-01-15 | 2011-01-17 | 3 |
| 6 | 2011-01-12 | 2011-01-14 | 3 |
| 9 | 2011-01-09 | 2011-01-11 | 3 |
+----------+--------------+--------------+----------+
4 rows in set (0.00 sec)
Thanks @Ronnis,我用你的例子,最後解決我的問題。
而且還有一個小錯誤,我發現,例如,我添加了一行
insert into t1(created) values (date '2011-01-21')
現在,我得到:
+----------+--------------+--------------+----------+
| days_ago | min(created) | max(created) | count(*) |
+----------+--------------+--------------+----------+
| 1986 | 2011-01-20 | 2011-01-21 | 2 |
| 1989 | 2011-01-17 | 2011-01-19 | 3 |
| 1992 | 2011-01-14 | 2011-01-16 | 3 |
| 1995 | 2011-01-11 | 2011-01-13 | 3 |
| 1998 | 2011-01-09 | 2011-01-10 | 2 |
+----------+--------------+--------------+----------+
正如你可以看到,天分爲2,3, 3,3,2這不是我所期望的。
更改SQL作爲
select floor(datediff(created, '2011-01-09')/3) * 3 as days_before
,min(created)
,max(created)
,count(*)
from t1
group by floor(datediff(created, '2011-01-09')/3);
從創建開始日期剛剛得到DATEDIFF,現在我得到:
+-------------+--------------+--------------+----------+
| days_before | min(created) | max(created) | count(*) |
+-------------+--------------+--------------+----------+
| 0 | 2011-01-09 | 2011-01-11 | 3 |
| 3 | 2011-01-12 | 2011-01-14 | 3 |
| 6 | 2011-01-15 | 2011-01-17 | 3 |
| 9 | 2011-01-18 | 2011-01-20 | 3 |
| 12 | 2011-01-21 | 2011-01-21 | 1 |
+-------------+--------------+--------------+----------+
這可能更適合。