2013-02-27 57 views
0

我在具有随机条目的mysql表中有一个DATETIME字段。我想选择对象组,并且当间隔四小时时将它们分开。理想情况下,我可以将每个组中的所有ID返回给一个数组(或子组?)。Mysql Group按时间结果集群

这似乎超出了我的SQL技能。

任何有趣的解决方案?

+0

您使用MySQL不知道 – 2013-02-27 02:27:26

+1

条件的老年有益的,如果你能提出一个小例子,有几个表格的行和一些期望的结果集行。 – 2013-02-27 02:36:52

+0

这和我想要去的一样接近。正如我在下面的帖子中提到的,现在我正在按日期时间选择所有行,并分析记录之间的时间;每次差异大于四小时时,将组加1。用例意味着分析了400-1500条记录,并且代码经常执行。这似乎是SQL能够提供的东西(时间间隔为4小时的CLUSTER)类型的东西...感谢小提琴,它给了我如何完成“几乎相同的事情”的想法,通过减少我的功能最大的id /最少id。 – user1955162 2013-02-27 10:56:15

回答

1

SQL旨在对数据执行集操作,而您要求的操作涉及顺序处理。

因此,我建议按顺序处理它,而不是试图扭曲SQL来尝试这样做。我相信你有两个基本的选择:

  1. 从存储过程中的表中选择数据,使用游标处理结果。

  2. 从您选择的外部独立语言(Java,C#,Python,PHP ......浮在你的船上)执行select语句,并在那里适当地分组数据。

1

您可以使用MySQL DATE_FORMAT子句。

SELECT CAST(DATE_FORMAT(date,'%Y-%m-%d %k:00:00') AS DATETIME) hour 
    FROM table 
WHERE date = CURRENT_DATE - INTERVAL 4 HOUR 
    GROUP BY CAST(DATE_FORMAT(date,'%Y-%m-%d %k:00:00') AS DATETIME) 
+0

我一直希望能够在SQL中完成这项工作,但SQL select语句确实有所帮助。我现在的解决方案是从顶部开始,选择前一个记录,并计算它们之间的时间。当他们超过四个小时时,我将group = group + 1增加到临时表中。这看起来好像不是对这个问题进行编码的最有效的方法,而且代码执行非常频繁。感谢您的帮助......它给我提供了关于分组记录的一些想法,而不理想的则提供了相同的功能。 – user1955162 2013-02-27 10:50:19