Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以特定时间间隔查询行的MySQL_Sql_Database_Mysql - Fatal编程技术网

以特定时间间隔查询行的MySQL

以特定时间间隔查询行的MySQL,sql,database,mysql,Sql,Database,Mysql,我对mysql查询感到有些困惑。谢谢你的帮助 我当前的查询: SELECT r.name , r.network , i.name , d.dtime , d.input FROM router AS r INNER JOIN interface AS i ON r.rid = i.rid INNER JOIN 1273118400_1_60 AS d ON i.id = d.id AND dtime BETWEEN 1273152000 AND 1273153800 WHERE i.sta

我对mysql查询感到有些困惑。谢谢你的帮助

我当前的查询:

SELECT
  r.name
, r.network
, i.name
, d.dtime
, d.input
FROM router AS r
INNER JOIN interface AS i
ON r.rid = i.rid
INNER JOIN 1273118400_1_60 AS d
ON i.id = d.id
AND dtime BETWEEN 1273152000 AND 1273153800 WHERE i.status = "active"
现在,我使用Unix_时间戳作为查询的时间间隔。 现在,我得到了以下方面的结果: 1273152000、1273152001、1273152002等等

我想以60秒为间隔,比如: 1273152000、1273152060、1273152120等等

你知道我该怎么做吗

请帮忙。 谢谢,


Jillika

我不确定它是否可以进一步简化,但您可能希望尝试以下方法:

SELECT       r.name,
             r.network,
             i.name,
             d.dtime,
             d.input
FROM         router AS r
INNER JOIN   interface AS i ON (r.rid = i.rid)
INNER JOIN   (
                 SELECT      t.dtime, dt.input, dt.id
                 FROM        1273118400_1_60 AS t
                 INNER JOIN  (
                                SELECT dtime, id, input
                                FROM   1273118400_1_60
                             ) AS dt ON (dt.dtime = t.dtime AND dt.id = t.id)
                 GROUP BY    t.dtime DIV 60
             ) AS d ON (i.id = d.id)
WHERE        (d.dtime BETWEEN 1273152000 AND 1273153800) AND 
             (i.status = 'active');
测试用例:

CREATE TABLE router (rid int, name varchar(20), network int);
CREATE TABLE interface (id int, rid int, status varchar(20), name varchar(10));
CREATE TABLE 1273118400_1_60 (id int, dtime int, input int);

INSERT INTO router VALUES (1, 'router A', 0);
INSERT INTO interface VALUES (1, 1, 'active', 'interface A');
INSERT INTO 1273118400_1_60 VALUES (1, 1273151999, 1);
INSERT INTO 1273118400_1_60 VALUES (1, 1273152000, 2);
INSERT INTO 1273118400_1_60 VALUES (1, 1273152001, 3);
INSERT INTO 1273118400_1_60 VALUES (1, 1273152002, 4);
INSERT INTO 1273118400_1_60 VALUES (1, 1273152059, 5);
INSERT INTO 1273118400_1_60 VALUES (1, 1273152060, 6);
INSERT INTO 1273118400_1_60 VALUES (1, 1273152061, 7);
INSERT INTO 1273118400_1_60 VALUES (1, 1273152062, 8);
INSERT INTO 1273118400_1_60 VALUES (1, 1273152119, 9);
INSERT INTO 1273118400_1_60 VALUES (1, 1273152120, 10);
INSERT INTO 1273118400_1_60 VALUES (1, 1273152121, 11);
结果:

+----------+---------+-------------+------------+-------+
| name     | network | name        | dtime      | input |
+----------+---------+-------------+------------+-------+
| router A |       0 | interface A | 1273152000 |     2 |
| router A |       0 | interface A | 1273152060 |     6 |
| router A |       0 | interface A | 1273152120 |    10 |
+----------+---------+-------------+------------+-------+
3 rows in set (0.00 sec)

你的问题不太清楚,但无论如何试试这个:

SELECT r.name, r.network, i.name, d.dtime, d.input
FROM router r
INNER JOIN interface i
ON r.rid = i.rid
INNER JOIN 1273118400_1_60 AS d
ON i.id = d.id
WHERE d.time > 1273152000 AND d.time < 1273153800 
AND i.status = "active";
选择r.name、r.network、i.name、d.dtime、d.input
从路由器r
内部连接接口i
关于r.rid=i.rid
内部连接1273118400_1_60作为d
在i.id=d.id上
其中d.time>1273152000和d.time<1273153800
和i.status=“active”;

您好,谢谢您的快速回复。我将尝试更清楚地说明:1273152000=unixtimestamp for:05/07/2010 09:20 1273153800=unixtimestamp for:05/07/2010 09:50我想查询每分钟间隔(60秒),因为我的表包含每秒的值。dtime=unix时间戳中的时间。知道我能做什么吗?嗯,我会考虑创建一个存储函数来处理它,如果它变得比这更复杂的话。
SELECT
r.name
,r.network
,i.name
, d.dtime
, 60*(floor(d.dtime/60)) dtime2
, d.input
FROM router AS r
INNER JOIN interface AS i
ON r.rid = i.rid
INNER JOIN 1273118400_1_60 AS d
ON i.id = d.id
AND dtime BETWEEN 1273152000 AND 1273153800 WHERE i.status = "active"