programing

교대 열 값별로 그룹화된 행 가져오기

copyandpastes 2022. 9. 13. 23:43
반응형

교대 열 값별로 그룹화된 행 가져오기

예를 들어 다음과 같은 표가 있다고 합시다.

아이디 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존재0engine_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_on0필터와 집약을 실시합니다.

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

반응형