如果它们足够接近,则查询以获取连续事件

时间:2009-12-10 14:57:36

标签: sql mysql datetime

这是我的表结构:
monResults:

id Int(10)
monDateTime日期时间()
typeId int(10)

我需要一个查询来获取所有monResults,这些monResults具有相距不到1分钟且具有相同typeId的连续monDateTime。我希望能够得到X个这样的事件。大多数情况下,我不知道如何添加条件使连续结果相隔不到1分钟。

3 个答案:

答案 0 :(得分:0)

你有没有尝试过这样做?是否要传入typeId,并让查询返回所有不到一分钟的ID?

问题是你只需得到一个排序列表,你仍然需要在一个程序中解析它,就像你会得到的一样,在一个非常人为的例子中,monDateTime是一个单位时间戳的变体,为了便于打字。

id=1, monDateTime=3
id=5, monDateTime=57
id=2, monDateTime=63
id=3, monDateTime=120

因此,您需要在应用程序中确定前两个是一个组,但第二个和第三个是一个组,因此id = 2和5分为两组。

如果你在一个程序中循环并说明我希望所有id都在特定idtypeId的一分钟之内,那么你可以在程序中组织它。

然后你可以使用TimeDiff函数减去你的特定id和数据库中的id: http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timediff

答案 1 :(得分:0)

这个问题有一些答案可能会引导你朝着正确的方向前进:

Group events by temporal distance in SQL

答案 2 :(得分:0)

SELECT  *
FROM    (
        SELECT  (@typeID = typeID AND @pdt >= monDateTime - INTERVAL 1 MINUTE) AS con,
                @typeID := typeID,
                @pdt := monDateTime 
        FROM    (
                SELECT  @typeID := NULL,
                        @pdt := NULL
                ) vars,
                mytable
        ORDER BY
                monDateTime 
        ) q
WHERE   con