SQL獲取用戶第一次登陸的設備號
有如下一張表
p_id d_id event_date g_p
1 2 2019-08-01 5
1 2 2019-09-01 8
2 3 2020-01-01 1
3 1 2019-03-01 9
3 5 2020-01-03 6
獲取p_id首次登陸設備的d_id,返回結果如下:
p_id d_id
1 2
2 3
3 1
解答:
首先聯想到的是row_number函數進行排序,然後獲取排名第一的數據,查詢SQL如下:
第一步:對p_id字段進行分組並排序
SELECT p_id
,d_id
,event_date
,row_number () over (PARTITION BY p_id ORDER BY event_date) AS rn
FROM test_01
結果:
p_id d_id event_date rn
1 2 2019-08-01 1
1 2 2019-09-01 2
2 3 2020-01-01 1
3 1 2019-03-01 1
3 5 2020-01-03 2
第二步:獲取rn爲1的數據
SELECT p_id
,d_id
FROM(
SELECT p_id
,d_id
,event_date
,row_number ( ) over ( PARTITION BY p_id ORDER BY event_date ) AS rn
FROM test_01
) a
WHERE rn = 1;
結果:
p_id d_id
1 2
2 3
3 1
備註:建表和數據
create table test_01 (p_id int,d_id int,event_date date,g_p int);
insert into test_01 values(1,2,'2019-08-01',5);
insert into test_01 values(1,2,'2019-09-01',8);
insert into test_01 values(2,3,'2020-01-01',1);
insert into test_01 values(3,1,'2019-03-01',9);
insert into test_01 values(3,5,'2020-01-03',6);