[SQL] 시퀀스 만 행을 SQL 기
SQL시퀀스 만 행을 SQL 기
나는 다음과 같은 테이블이 말 :
MyTable
---------
| 1 | A |
| 2 | A |
| 3 | A |
| 4 | B |
| 5 | B |
| 6 | B |
| 7 | A |
| 8 | A |
---------
나는 출력 다음에 SQL 쿼리가 필요합니다 :
---------
| 3 | A |
| 3 | B |
| 2 | A |
---------
나는 기본적으로 만 순서에서 함께있는 행에 대한 그룹을하고 있어요. 어떤 아이디어?
참고 데이터베이스가 SQL 서버 2008에 있는지가 오라클의 지연 () 함수를 사용하지만이 주제에 대한 게시물이 있습니다.
해결법
-
==============================
1.이 작업은 "섬"문제로 알려져있다. Itzik 벤 웨이 코 뮤니시의 접근 방식을 사용 :
이 작업은 "섬"문제로 알려져있다. Itzik 벤 웨이 코 뮤니시의 접근 방식을 사용 :
;WITH YourTable AS ( SELECT 1 AS N, 'A' AS C UNION ALL SELECT 2 AS N, 'A' AS C UNION ALL SELECT 3 AS N, 'A' AS C UNION ALL SELECT 4 AS N, 'B' AS C UNION ALL SELECT 5 AS N, 'B' AS C UNION ALL SELECT 6 AS N, 'B' AS C UNION ALL SELECT 7 AS N, 'A' AS C UNION ALL SELECT 8 AS N, 'A' AS C ), T AS (SELECT N, C, DENSE_RANK() OVER (ORDER BY N) - DENSE_RANK() OVER (PARTITION BY C ORDER BY N) AS Grp FROM YourTable) SELECT COUNT(*), C FROM T GROUP BY C, Grp ORDER BY MIN(N)
-
==============================
2.이 당신을 위해 작동합니다 ...
이 당신을 위해 작동합니다 ...
SELECT Total=COUNT(*), C FROM ( SELECT NGroup = ROW_NUMBER() OVER (ORDER BY N) - ROW_NUMBER() OVER (PARTITION BY C ORDER BY N), N, C FROM MyTable )RegroupedTable GROUP BY C,NGroup
-
==============================
3.그냥 재미를 위해, 어떤 SQL 특정 기능없이 NOT은 ID 열이 일정하게 증가하는 것을 가정 :
그냥 재미를 위해, 어떤 SQL 특정 기능없이 NOT은 ID 열이 일정하게 증가하는 것을 가정 :
WITH starters(name, minid, maxid) AS ( SELECT a.name, MIN(a.id), MAX(a.id) FROM mytable a RIGHT JOIN mytable b ON (a.name <> b.name AND a.id < b.id) WHERE a.id IS NOT NULL GROUP BY a.name ), both(name, minid, maxid) AS ( SELECT name, minid, maxid FROM starters UNION ALL SELECT name, MIN(id), MAX(id) FROM mytable WHERE id > (SELECT MAX(maxid) from starters) GROUP BY name ) SELECT COUNT(*), m.name, minid FROM both INNER JOIN mytable m ON id BETWEEN minid AND maxid GROUP BY m.name, minid
합니다 (midid 열 무시) 결과 :
(No column name) name minid 3 A 1 3 B 4 2 A 7
from https://stackoverflow.com/questions/4324623/sql-group-by-only-rows-which-are-in-sequence by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 큰 테이블에 오프셋 최적화 쿼리 (0) | 2020.04.11 |
---|---|
[SQL] 내가 모델 첫 번째 방법에서 날짜로 설정 SQL 유형의 구조 주석을 어떻게 사용합니까 (0) | 2020.04.11 |
[SQL] 어떻게 커서를 사용하지 않고 SQL의 실행 합계를 계산합니까? (0) | 2020.04.11 |
[SQL] 크로스 조인을 사용하여 두 테이블 사이에 쉼표를 넣어의 차이점은 무엇입니까? (0) | 2020.04.11 |
[SQL] SQL Server의 두 날짜 사이의 모든 날짜를 가져옵니다 (0) | 2020.04.11 |