SQL獲取用戶第一次登陸的設備號

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);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章