SQL日付は、互いにX秒の範囲内で行を選択します
質問
私のSQLテーブルは(message、created)のようなものです
互いにX秒以内にある行を選択したい。最後のメッセージがNOW()からX秒以内にあるとしたら、それを選択する必要があります。最後から2番目のメッセージが最後のメッセージからX秒以内にある場合は、それも選択する必要があります。つまり、各行を次の行と比較してチェックする必要があります。最後の行については、NOW()で確認する必要があります。基本的に、メッセージの最後のセッション(つまり、X秒以内に結果として生じるメッセージが相互にリンクされていると仮定して、相互にリンクした最後のメッセージセット)が必要です
このための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