반응형
교대 열 값별로 그룹화된 행 가져오기
예를 들어 다음과 같은 표가 있다고 합시다.
아이디 | engine_id | 타임스탬프 | engine_is_on |
---|---|---|---|
13 | 1 | 1015 | 1 |
12 | 1 | 1010 | 1 |
11 | 1 | 1008 | 0 |
10 | 1 | 1006 | 1 |
9 | 2 | 1005 | 1 |
8 | 1 | 1005 | 1 |
7 | 2 | 1004 | 1 |
6 | 1 | 1004 | 1 |
5 | 1 | 1003 | 0 |
4 | 2 | 1002 | 0 |
3 | 1 | 1002 | 1 |
2 | 2 | 1001 | 1 |
1 | 1 | 1001 | 1 |
교대 열별로 그룹화된 항목의 첫 번째 ID와 마지막 ID를 가져오는 방법engine_is_on
및 그룹화 기준engine_id
원하는 결과의 예를 들면, 내가 의미하는 바를 명확하게 할 수 있을 것이다.
engine_id | start_id | end_id |
---|---|---|
1 | 13 | 12 |
1 | 10 | 6 |
2 | 9 | 7 |
1 | 3 | 1 |
2 | 2 | 2 |
명료하게 하기 위해서: 각각의 외관에는engine_is_on
존재0
engine_id에 대해 새 행을 만들고 있습니다.
복제할 SQL:
CREATE TABLE mytable(
`id` INT(11) AUTO_INCREMENT PRIMARY KEY,
`engine_id` INT(11),
`timestamp` INT(11),
`engine_is_on` TINYINT(1)
);
INSERT INTO mytable(`engine_id`, `timestamp`, `engine_is_on`) VALUES
('1', '1001', '1'),
('2', '1001', '1'),
('1', '1002', '1'),
('2', '1002', '0'),
('1', '1003', '0'),
('1', '1004', '1'),
('2', '1004', '1'),
('1', '1005', '1'),
('2', '1005', '1'),
('1', '1006', '1'),
('1', '1008', '0'),
('1', '1010', '1'),
('1', '1015', '1');
SELECT * FROM mytable ORDER BY id DESC;
내가 노력한 것을 제공해야 한다는 것을 알지만, 어디서부터 시작해야 할지조차 모르겠다.또는 올바른 방향으로 안내하기 위해 구글을 올바르게 검색해야 합니다.
이 질문을 이해하기 쉽게 하는 방법에 대해 자유롭게 코멘트해 주십시오(적절한 제목 설정 포함).
값은 다음과 같이 합계할 수 있습니다.engine_is_on
이0
필터와 집약을 실시합니다.
select engine_id, min(id), max(id)
from (select mytable.*,
sum(engine_is_on = 0) over (partition by engine_id order by timestamp) as grp
from mytable
) t
where engine_is_on = 1
group by engine_id, grp;
언급URL : https://stackoverflow.com/questions/69136603/get-rows-grouped-by-alternating-column-value
반응형
'programing' 카테고리의 다른 글
mariadb 로그는 어디에 있습니까? (0) | 2022.09.13 |
---|---|
두 표 중 하나에서 값을 제외한 고유한 값을 얻는 방법 (0) | 2022.09.13 |
다른 어레이에 포함된 모든 요소 제거 (0) | 2022.09.13 |
Python에서 >>와 <<>는 무엇을 의미합니까? (0) | 2022.09.13 |
MySQL에서 누적 합계 열 생성 (0) | 2022.09.13 |