我在具有随机条目的mysql表中有一个DATETIME字段。我想选择对象组,并且当间隔四小时时将它们分开。理想情况下,我可以将每个组中的所有ID返回给一个数组(或子组?)。Mysql Group按时间结果集群
这似乎超出了我的SQL技能。
任何有趣的解决方案?
我在具有随机条目的mysql表中有一个DATETIME字段。我想选择对象组,并且当间隔四小时时将它们分开。理想情况下,我可以将每个组中的所有ID返回给一个数组(或子组?)。Mysql Group按时间结果集群
这似乎超出了我的SQL技能。
任何有趣的解决方案?
SQL旨在对数据执行集操作,而您要求的操作涉及顺序处理。
因此,我建议按顺序处理它,而不是试图扭曲SQL来尝试这样做。我相信你有两个基本的选择:
从存储过程中的表中选择数据,使用游标处理结果。
从您选择的外部独立语言(Java,C#,Python,PHP ......浮在你的船上)执行select语句,并在那里适当地分组数据。
您可以使用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)
我一直希望能够在SQL中完成这项工作,但SQL select语句确实有所帮助。我现在的解决方案是从顶部开始,选择前一个记录,并计算它们之间的时间。当他们超过四个小时时,我将group = group + 1增加到临时表中。这看起来好像不是对这个问题进行编码的最有效的方法,而且代码执行非常频繁。感谢您的帮助......它给我提供了关于分组记录的一些想法,而不理想的则提供了相同的功能。 – user1955162 2013-02-27 10:50:19
您使用MySQL不知道 – 2013-02-27 02:27:26
条件的老年有益的,如果你能提出一个小例子,有几个表格的行和一些期望的结果集行。 – 2013-02-27 02:36:52
这和我想要去的一样接近。正如我在下面的帖子中提到的,现在我正在按日期时间选择所有行,并分析记录之间的时间;每次差异大于四小时时,将组加1。用例意味着分析了400-1500条记录,并且代码经常执行。这似乎是SQL能够提供的东西(时间间隔为4小时的CLUSTER)类型的东西...感谢小提琴,它给了我如何完成“几乎相同的事情”的想法,通过减少我的功能最大的id /最少id。 – user1955162 2013-02-27 10:56:15