결과가 관심있는 셀 바로 위에있는 셀의 값을 기반으로하는 mysql 쿼리를 실행하고 싶습니다. 예를 들어, 일련의 행동에 소요 된 시간을 계산하고 있으며 걷기에 소요 된 시간이 걷기 직전에 발생한 수유에 소요 된 시간보다 긴 경우를 식별하고 싶습니다. 다음은 샘플 데이터 세트입니다.
ID Duration (min) Time of Day Behavior
1 21 9:01 Walk
1 31 9:22 Eat
1 15 9:53 Walk
1 21 10:14 Eat
2 7 1:00 Walk
2 9 1:07 Eat
2 4 1:16 Walk
내 쿼리에서 '기간'금액이 이전 행보다 작은 두 행을 식별하고 싶습니다. IE : ID1에 대한 세 번째 항목 및 ID2에 대한 세 번째 항목.
어떤 도움이라도 대단히 감사하겠습니다. 고마워
샘플 데이터 :
CREATE TABLE t
(pkai int auto_increment primary key, `ID` int, `Duration` int, `TOD` time, `Behavior` varchar(4))
;
INSERT INTO t
(`ID`, `Duration`, `TOD`, `Behavior`)
VALUES
(1, 21, '9:01', 'Walk'),
(1, 31, '9:22', 'Eat'),
(1, 15, '9:53', 'Walk'),
(1, 21, '10:14', 'Eat'),
(2, 7, '01:00', 'Walk'),
(2, 9, '01:07', 'Eat'),
(2, 4, '01:16', 'Walk')
;
기본 키 (auto_increment)로 사용되는 다른 열을 추가했습니다. 여기서는 일이 덜 복잡해지며 어쨌든 기본 키가 있어야합니다.
질문:
select ID, Duration, TOD, Behavior from (
select
t.*,
if(@prev_duration > Duration and @prev_id = ID, 1, 0) as prev_entry_longer,
@prev_duration := if(@prev_id != ID, null, Duration),
@prev_id := ID
from
t
, (select @prev_duration := Duration, @prev_id := ID from t order by pkai limit 1) var_init
where pkai != (select min(pkai) from t)
order by ID, TOD
) sq
where prev_entry_longer = 1;
결과:
| ID | DURATION | TOD | BEHAVIOR |
|----|----------|--------------------------------|----------|
| 1 | 15 | January, 01 1970 09:53:00+0000 | Walk |
| 2 | 4 | January, 01 1970 01:16:00+0000 | Walk |
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다