SQL 구문 통계 연속 로그 인 3 일 이상 의 사용자 사례 분석
31216 단어 빅 데이터
이 문 제 는 비슷 한 문제 로 확대 할 수 있다. 몇 달 동안 회원 을 충전 하고 며칠 동안 상품 을 판매 하 며 계속 방울 을 맞 고 기한 을 넘 길 수 있다.
+---------+--------+-------------+-------------+--+
| uid | times | start_date | end_date |
+---------+--------+-------------+-------------+--+
| guid01 | 4 | 2018-03-04 | 2018-03-07 |
| guid02 | 3 | 2018-03-01 | 2018-03-03 |
+---------+--------+-------------+-------------+--+
사고: sql 을 쓰 는 것 이지 1. 그룹 을 나 누고 정렬 하 며 줄 번 호 를 매 긴 다. 2. 시간 스탬프 - 줄 번 호 는 차이 에 따라 연속 적 인 전체 답 인지 확인 하도록 한다.
select
uid,min(dt),max(dt),count(1) as counts
from
(
select
uid ,dt, date_sub(dt,rn) as dis
from
(
select
uid ,dt,row_number()over (partition by uid order by dt)rn
from continuous
)t1
)t2
group by uid ,dis having counts>2
정 답: 1. 그룹 정렬 줄 번호 매기 기
select
uid ,dt,row_number()over (partition by uid order by dt)rn
from continuous
표 구현
+------+-------------------+---+
| uid| dt| rn|
+------+-------------------+---+
|guid02|2018-03-01 00:00:00| 1|
|guid02|2018-03-02 00:00:00| 2|
|guid02|2018-03-03 00:00:00| 3|
|guid02|2018-03-06 00:00:00| 4|
|guid01|2018-02-28 00:00:00| 1|
|guid01|2018-03-01 00:00:00| 2|
|guid01|2018-03-02 00:00:00| 3|
|guid01|2018-03-04 00:00:00| 4|
|guid01|2018-03-05 00:00:00| 5|
|guid01|2018-03-06 00:00:00| 6|
|guid01|2018-03-07 00:00:00| 7|
+------+-------------------+---+
2... 타임 스탬프 - 줄 번 호 는 차이 에 따라 연속 여 부 를 검사 합 니 다.
select
uid ,dt, date_sub(dt,rn) as dis
from
(
select
uid ,dt,row_number()over (partition by uid order by dt)rn
from continuous
)t1
표 구현
+------+-------------------+----------+
| uid| dt| dis|
+------+-------------------+----------+
|guid02|2018-03-01 00:00:00|2018-02-28|
|guid02|2018-03-02 00:00:00|2018-02-28|
|guid02|2018-03-03 00:00:00|2018-02-28|
|guid02|2018-03-06 00:00:00|2018-03-02|
|guid01|2018-02-28 00:00:00|2018-02-27|
|guid01|2018-03-01 00:00:00|2018-02-27|
|guid01|2018-03-02 00:00:00|2018-02-27|
|guid01|2018-03-04 00:00:00|2018-02-28|
|guid01|2018-03-05 00:00:00|2018-02-28|
|guid01|2018-03-06 00:00:00|2018-02-28|
|guid01|2018-03-07 00:00:00|2018-02-28|
+------+-------------------+----------+
3. 연속 적 인 연결 을 위해 같은 count (1) 함수 로 줄 의 총 수 를 계산한다.
select
uid,min(dt),max(dt),count(1) as counts
from
(
select
uid ,dt, date_sub(dt,rn) as dis
from
(
select
uid ,dt,row_number()over (partition by uid order by dt)rn
from continuous
)t1
)t2
group by uid
표 구현
+------+-------------------+-------------------+------+
| uid| min(dt)| max(dt)|counts|
+------+-------------------+-------------------+------+
|guid02|2018-03-01 00:00:00|2018-03-03 00:00:00| 3|
|guid01|2018-02-28 00:00:00|2018-03-02 00:00:00| 3|
|guid01|2018-03-04 00:00:00|2018-03-07 00:00:00| 4|
+------+-------------------+-------------------+------+
4. 이런 결 과 를 얻 은 점 포 는 중복 되 어 수입 이 가장 좋 은 점 포 를 나타 내기 위해 이 를 바탕 으로 2 층 select 를 한다.
select
*
from
(
select
*,
row_number() over(partition by uid order by counts desc) aa
from
(
select
uid,min(dt),max(dt),count(1) as counts
from
(
select
uid ,dt, date_sub(dt,rn) as dis
from
(
select
uid ,dt,row_number()over (partition by uid order by dt)rn
from continuous
)t1
)t2
group by uid
)t3
)t4
where aa = 1
표 구현:
+------+-------------------+-------------------+------+
| uid| min(dt)| max(dt)|counts|
+------+-------------------+-------------------+------+
|guid02|2018-03-01 00:00:00|2018-03-03 00:00:00| 3|
|guid01|2018-02-28 00:00:00|2018-03-02 00:00:00| 3|
|guid01|2018-03-04 00:00:00|2018-03-07 00:00:00| 4|
+------+-------------------+-------------------+------+
이것 은 본인 의 프로필 입 니 다. 더 좋 은 방법 이 있 으 면 댓 글로 남 겨 주세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spark 의 2: 원리 소개Google Map/Reduce 를 바탕 으로 이 루어 진 Hadoop 은 개발 자 에 게 map, reduce 원 어 를 제공 하여 병렬 일괄 처리 프로그램 을 매우 간단 하고 아름 답 게 만 들 었 습 니 다.S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.