1

「タイムスタンプ」列を持つmysqlテーブルがあります。

ここで、互いに 5 分の差がある要素を選択したいと考えています。

簡単な例:

id   |    timestamp
===================
1    |    00:00
2    |    00:01
3    |    00:03
4    |    00:05
5    |    00:07
6    |    00:09
7    |    00:15

IDを返す必要があります1, 4, 7

これはSQLステートメントで可能ですか?

4

2 に答える 2

1

最初のタイムスタンプに関係なく機能するはずのソリューションを次に示します。

SELECT id, ts FROM (
SELECT 
IF(UNIX_TIMESTAMP(ts) = @prev OR UNIX_TIMESTAMP(ts) % 300 = @prev % 300, @mybool:=1, @mybool:=0) AS mybool,
IF(@mybool = 1, @prev:=UNIX_TIMESTAMP(ts), @prev:=@prev),
t.*
FROM Table2 t,
(SELECT @prev:=(SELECT MIN(UNIX_TIMESTAMP(ts)) FROM Table2 sqt), @mybool:=1) vars
ORDER BY id
) sq 
WHERE mybool = 1;

sqlfiddleでライブで動作することを確認してください。

最初のタイムスタンプが「00:00」の場合、簡単に実行できます

SELECT * 
FROM Table1
WHERE UNIX_TIMESTAMP(ts) % 300 = 0
ORDER BY id;

しかし、それを機能UNIX_TIMESTAMP()させるには協力する必要があります。タイムスタンプは 32 ビット整数としてデータベースに格納されますが、整数表現で作業することを MySQL に伝える必要があります。

于 2013-06-11T09:38:02.757 に答える
0
select id from table where timestamp % 5 = 0

正確な構文は、列のデータ型に少し依存しtimestampますが、一般的にモジュロ演算子を使用して実行できるはずです。

于 2013-06-11T08:45:04.317 に答える