CREATE TABLE IF NOT EXISTS `vals` (
`DT` datetime NOT NULL,
`value` INT(11) NOT NULL,
PRIMARY KEY (`DT`)
);
DT는 같은 MySQL의 테이블이 시간에 고유 한 날짜입니다 가지고
데이터 샘플 : 내가 얻을 필요가
INSERT INTO `vals` (`DT`,`value`) VALUES
('2011-02-05 06:05:00', 300),
('2011-02-05 11:05:00', 250),
('2011-02-05 14:35:00', 145),
('2011-02-05 16:45:00', 100),
('2011-02-05 18:50:00', 125),
('2011-02-05 19:25:00', 100),
('2011-02-05 21:10:00', 125),
('2011-02-06 00:30:00', 150);
다음과 같은 내용 :
start|end|value
NULL,'2011-02-05 06:05:00',300
'2011-02-05 06:05:00','2011-02-05 11:05:00',250
'2011-02-05 11:05:00','2011-02-05 14:35:00',145
'2011-02-05 14:35:00','2011-02-05 16:45:00',100
'2011-02-05 16:45:00','2011-02-05 18:50:00',125
'2011-02-05 18:50:00','2011-02-05 19:25:00',100
'2011-02-05 19:25:00','2011-02-05 21:10:00',125
'2011-02-05 21:10:00','2011-02-06 00:30:00',150
'2011-02-06 00:30:00',NULL,NULL
나는 다음과 같은 쿼리를 시도 :
SELECT T1.DT AS `start`,T2.DT AS `stop`, T2.value AS value FROM (
SELECT DT FROM vals
) T1
LEFT JOIN (
SELECT DT,value FROM vals
) T2
ON T2.DT > T1.DT ORDER BY T1.DT ASC
을하지만 많은 행에 반환 (29 대신 9) 결과와 나는이 사용하는 SQL을 제한 할 수있는 방법을 찾을 수 없습니다 콜드. 그것은 MySQL에서 가능합니까? 두 개의 서로 다른과를 출력을
select @myvar as start, end, value, @myvar := end as next_rows_start
from vals
변수가 순서대로 왼쪽에서 오른쪽으로 해석되므로 두 개의 참조 (next_rows_start 시작) @myvar하기 :
당신은 서버 측 변수를 사용할 수 있습니다
'순수 SQL'버전이 작동하지만 (노력과 프로파일 링 및 색인 작성에도 불구하고) O (n^2) . 18,000 개의 행 테이블이 주어지면 pure SQL 버전은 580 초가 걸리며, 변수가있는 MySQL 관련 버전은 2.5 초 정도 걸립니다. 두 버전을 모두 제공해 주셔서 감사합니다. –