题
我的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是在时间帧的秒数。
不隶属于 StackOverflow