我的SQL表是类似的信息(消息,创建)

我要选择那些彼此X秒内的行。说的最后一条消息是X秒内从NOW(),那么就应该选择它。如果倒数第二个消息是从最后一个消息X秒内就应该选择它了。换句话说,每个行应与下一行进行比较和检查。对于最后一排它应该说现在可以检查()。基本上我想消息的最后的会话(即最后一组,我们彼此连接的消息,假定X秒内consequtive消息被彼此连接)

我不知道如何去写一个SQL查询这一点。它甚至有可能?

非常感谢您的宝贵时间。

有帮助吗?

解决方案

本脚本在SQLServer的工作原理。您应该能够拿出的SELECT语句,并在MySQL运行。

DECLARE @Messages TABLE (Message VARCHAR(10), Created DATETIME)
DECLARE @Interval FLOAT

-- Interval is 1 day.
SET @Interval = 1

-- These should be in result
INSERT INTO @Messages VALUES ('Message1', GetDate())    
INSERT INTO @Messages VALUES ('Message2', GetDate()-1)
-- These should not be in result
INSERT INTO @Messages VALUES ('Message3', GetDate()-3)
INSERT INTO @Messages VALUES ('Message4', GetDate()-5)

SELECT m1.Message, m1.Created
FROM @Messages m1
     INNER JOIN @Messages m2 ON m2.Created <= m1.Created + @Interval                                
                                AND m2.Created >= m1.Created
                                AND m2.Message <> m1.Message
UNION ALL SELECT m2.Message, m2.Created
FROM @Messages m1
     INNER JOIN @Messages m2 ON m2.Created <= m1.Created + @Interval                                
                                AND m2.Created >= m1.Created
                                AND m2.Message <> m1.Message
ORDER BY Created

其他提示

我相信你所想太复杂(但话又说回来,也许我误解了要求?)

此选择在30秒内创建的所有消息的特定消息之前:

SELECT
  Id,
  MessageText,
  MessageDate
FROM
  Message
WHERE
  TIME_TO_SEC(TIMEDIFF(
    (
      SELECT MessageDate 
      FROM   Message
      WHERE  Id = 17
    ),
    MessageDate
  )) <= 30

,其中17是当然的消息ID你有兴趣,并且图30是在时间帧的秒数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top