반응형
mariadb 가장 긴 동시 번호 시퀀스를 찾는 방법
구성원과 실행 중인 시간을 설명하는 표가 있습니다. 예:
memberid(varchar), RunNo(integer)
"1017",1868
"1017",1875
"1017",1877
"1017",1878
"1017",1879
"1017",1880
"1017",1882
"1017",1884
"1017",1885
"1017",1886
"1017",1887
"1017",1889
"1017",1894
"1017",1895
"1017",1896
"1017",1897
"1017",1902
"1017",1903
"1017",1904
"1017",1906
"1017",1907
"1017",1909
"1017",1910
"1017",1911
"1017",1929
"1017",1930
"1017",1931
"1017",1934
"1017",1935
"1079",1840
"1079",1844
"1079",1846
"1079",1847
"1079",1850
"1079",1854
"1079",1857
"1079",1859
"1079",1861
"1079",1863
"1079",1865
"1079",1866
"1079",1869
"1079",1870
"1079",1871
"1079",1872
"1079",1873
"1079",1874
"1079",1875
"1079",1876
"1079",1877
"1079",1878
"1079",1879
"1079",1880
"1079",1882
"1079",1884
"1079",1885
"1079",1886
"1079",1889
"1079",1890
"1079",1891
"1079",1893
"1079",1895
"1079",1897
"1079",1902
"1079",1903
"1079",1904
"1079",1905
"1079",1907
"1079",1908
"1079",1910
"1079",1911
"1079",1923
각 멤버 ID에 대해 각 주자에 대해 가장 긴 연속 런 번호 시퀀스가 무엇인지, 유사한 시퀀스가 여러 개 있다고 가정하고 런 번호가 날짜 순서에 있다고 가정할 때 가장 최근이고 가장 긴 시퀀스는 무엇인지 찾고 싶습니다.
예를 들어, 1017은 연속해서 최대 4개의 런을 가지며 1079는 최대 12개의 런을 갖습니다.
이것을 해결할 방법이 있어야 하는데 저는 해결책을 찾지 못했습니다.
Windows 10에서 MariaDB v10.4.22를 사용하고 있습니다.
이것은 아래와 같은 재귀적 CTE로 해결할 수 있는 문제입니다.
WITH RECURSIVE runlength AS
(SELECT memberId AS id,
RunNo + 1 AS next,
1 AS length
FROM members
UNION ALL SELECT members.memberId,
RunNo+1,
length+1
FROM members
JOIN runlength ON members.memberId = runlength.id
AND members.runNo = next)
SELECT id,
max(length)
FROM runlength
GROUP BY id;
앵커가 이니셜을 설정합니다.runlength각 길이가 1인 초기 값과 시퀀스를 증가시킬 다음 값이 내용입니다.
SELECT memberId AS id,
RunNo + 1 AS next,
1 AS length
FROM members
재귀 부분은 시퀀스의 다음 부분을 찾고 길이를 늘립니다.
SELECT members.memberId,
RunNo+1,
length+1
FROM members
JOIN runlength ON members.memberId = runlength.id
AND members.runNo = next
마지막으로 짧은 시퀀스가 너무 많기 때문에 사용자당 최대치만 사용할 수 있습니다.
SELECT id,
max(length)
FROM runlength
GROUP BY id;
참고: 생성된 행 수가 많기 때문에 효율적인 쿼리가 아니며 소규모 데이터 세트에만 사용해야 합니다.
참조: 피들
언급URL : https://stackoverflow.com/questions/74577649/mariadb-how-to-find-longest-sequence-of-concurrent-numbers
반응형
'programing' 카테고리의 다른 글
| 중간 텍스트의 최대 길이? (0) | 2023.08.14 |
|---|---|
| 사용자가 Swift로 이미지를 선택할 수 있도록 하는 방법은 무엇입니까? (0) | 2023.08.14 |
| iOS 애플리케이션이 백그라운드로 이동하면 긴 작업이 일시 중지됩니까? (0) | 2023.08.14 |
| ng 클래스의 다중 조건 - 각도 4 (0) | 2023.08.09 |
| 변경 사항을 사용하여 체리픽 충돌을 해결하려면 어떻게 해야 합니까? (0) | 2023.08.09 |