按日期分组选择记录 - 可能吗?

时间:2009-11-29 02:55:30

标签: sql mysql

我认为没有一种优雅的方法可以做到这一点,但是这里有。数据库包含5000条记录,时间戳为2年。我需要在一年中的每一天下拉记录。

所以它看起来像..

09/09/2009 - record938,record2,record493

09/10/2009 - record260,record485,record610

...等

我不能使用GROUP BY。有重复,没关系。我需要展示它们。

这可能吗? PHP / MySQL的?

这样做的一种方法是循环查看一年中的每一天并使用“WHERE DAY(created_at)...”进行查询,但显然这不是很优雅。

我该怎么做?我之前发布this question没有得到满意答案(答案就是我刚才所说的)

1 个答案:

答案 0 :(得分:4)

MySQL有group_concat() aggregate function

SELECT date(rec_time), group_concat(rec_id)
FROM records GROUP BY date(rec_time);

对于每个日期,将返回逗号加入的表中的所有rec_id值。如果您想要,以外的分隔符,请使用group_concat(some_column SEPARATOR '-')

实施例

例如,如果您的表格如下:

+--------+---------------------+
| rec_id | rec_time            |
+--------+---------------------+
|      1 | 2009-11-28 10:00:00 |
|      2 | 2009-11-28 20:00:00 |
|      3 | 2009-11-27 15:00:00 |
|      4 | 2009-11-27 07:00:00 |
|      5 | 2009-11-28 08:00:00 |
+--------+---------------------+

然后这个查询给出:

mysql> SELECT date(rec_time), group_concat(rec_id) 
    -> FROM records GROUP BY date(rec_time);
+----------------+----------------------+
| date(rec_time) | group_concat(rec_id) |
+----------------+----------------------+
| 2009-11-27     | 3,4                  |
| 2009-11-28     | 1,2,5                |
+----------------+----------------------+

买者

请注意,结果受group_concat_max_len系统变量的限制,该变量默认只有1024个字节!为避免触及此墙,您应在运行查询之前执行此操作:

SET SESSION group_concat_max_len = 65536;

或更多,取决于您期望的结果数量。但是此值不能大于max_allowed_packet