Sql 按日期分组选择记录-可能吗?
我不认为有一个优雅的方式来做到这一点,但这里有。数据库包含5000条时间戳为2年的记录。我需要在一年中的每一天提取记录 所以看起来 2009年9月9日-记录938、记录2、记录493 2009年10月9日-记录260、记录485、记录610 …等等 我不能使用分组方式。有重复的,没关系。我需要给他们看 这可能吗?PHP/MySQL 一种方法是在一年中的每一天进行循环,并使用“WHERE day(created_at)…”进行查询,但显然这并不优雅 我该怎么做?我之前发布的帖子没有令人满意的答案(答案就是我刚才所说的)MySQL有: 对于每个日期,将返回由逗号连接的表中的所有Sql 按日期分组选择记录-可能吗?,sql,mysql,Sql,Mysql,我不认为有一个优雅的方式来做到这一点,但这里有。数据库包含5000条时间戳为2年的记录。我需要在一年中的每一天提取记录 所以看起来 2009年9月9日-记录938、记录2、记录493 2009年10月9日-记录260、记录485、记录610 …等等 我不能使用分组方式。有重复的,没关系。我需要给他们看 这可能吗?PHP/MySQL 一种方法是在一年中的每一天进行循环,并使用“WHERE day(created_at)…”进行查询,但显然这并不优雅 我该怎么做?我之前发布的帖子没有令人满意的答案(
rec_id
值。如果需要除以外的分隔符,
请使用组(某些列分隔符“-”)
实例
例如,如果您的表看起来像:
+--------+---------------------+
| 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\u concat\u max\u len
系统变量的限制,该系统变量默认值仅为1024字节!为了避免撞到这堵墙,您应该在运行查询之前执行以下操作:
SET SESSION group_concat_max_len = 65536;
或者更多,取决于您期望的结果数量。但是这个值不能大于
max\u allowed\u packet
你能解释一下为什么不能使用groupby
?@Adam:“有重复的,没关系。”@OMG:但是记录是他想要的重复项,而不是日期,这就是分组语句。详见intgr的答案。@Adam:参见前面的问题-我非常清楚Isude想要解决的情况。@OMG:他提出的解决方案非常合理。我看不出它是如何不满足要求的,特别是考虑到这个问题中提出的格式(另一个似乎使用换行符而不是逗号)。
SET SESSION group_concat_max_len = 65536;