2010-08-04 5 views
2

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.status = "active" 

지금은 내가 질의하고 그 사이의 시간 간격에 대한 UNIX_TIMESTAMP을 사용하고 있습니다. 지금은 1273152000, 1273152001, 1273152002 등의 결과가 표시됩니다.

1273152000, 1273152060, 1273152120 등과 같이 60 초 간격으로 가져오고 싶습니다.

내가 어떻게 그것에 대해 갈 수 있는지?

도와주세요. 는 더욱 단순화 할 수 있는지 확실하지 않습니다

Jillika

답변

2

에게, 감사합니다,하지만 당신은 다음과 같은 시도 할 수 있습니다 :

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) 
0

당신이있는 거 문제는 지나치게 명확하지 않습니다 만, 어쨌든이 시도 :

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"; 
+0

안녕, 빠른 응답 감사합니다. 1273152000 = 위해 UnixTimeStamp을 위해 : 2010년 5월 7일 9시 20분 1273153800 = 위해 UnixTimeStamp에 대한 : 가 명확하게하려고합니다 나는 모든 분 간격으로 조회 할 2010년 5월 7일 9시 50분 (60 초) 내 테이블에 매초마다 값이 들어 있기 때문입니다. dtime = unix_timestamp의 시간입니다. 어떻게 할 수 있습니까? – JJunior

+0

흠, 그것보다 복잡해지면 저장 함수를 생성하여 처리하는 방법을 생각해 보겠습니다. – Evernoob

0
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" 
관련 문제