繁体   English   中英

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

[英]Selecting records in groups by date - possible?

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

所以看起来像..

2009/09/09-record938,record2,record493

2009年9月10日-record260,record485,record610

...等等

我不能使用GROUP BY。 有重复项,没关系。 我需要给他们看。

这可能吗? PHP / MySQL?

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

我怎样才能做到这一点? 我在没有令人满意的答案之前就发布了这个问题 (答案就是我上面所说的)

MySQL具有group_concat()聚合函数

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM