Sql 裡面 ROW_NUMBER 應用情境

來源:互聯網
上載者:User

ROW_NUMBER 返回按一定規則排序的目前記錄對應的行號 

 

比如我們有這樣一個應用情境: 

現在有個比賽,需要從網上參賽者從從網路上報名,然後去最早報名的5個人蔘加比賽,為此我們實現如下:

1.為此我們要建立一張表來儲存報名參賽者的姓名及起報名時間  

CREATE  TABLE [dbo].[UserEnroll]([UserName] [nvarchar] (50) NULL, --參賽者的姓名[EnrollTime] [datetime] NULL --報名時間 )  ON  [PRIMARY]

 

2.我們Sql 向表中插入資料,類比參賽者報名  

insert into [dbo].[UserEnroll] values('CC', GETDATE()) insert into [dbo].[UserEnroll] values('CC1', DateAdd(DAY,-1,GETDATE()))insert into [dbo].[UserEnroll] values('CC2', DateAdd(DAY,-2,GETDATE()))insert into [dbo].[UserEnroll] values('CC3', DateAdd(DAY,-3,GETDATE()))insert into [dbo].[UserEnroll] values('CC4', DateAdd(DAY,-4,GETDATE ()))insert into [dbo].[UserEnroll] values('CC5', DateAdd(DAY,-5,GETDATE()))insert into [dbo].[UserEnroll] values('CC6', DateAdd(DAY,-6,GETDATE()))insert into [dbo].[UserEnroll] values('CC7', DateAdd(DAY,-7,GETDATE()))

 3.刪除非最早5個報名的人

  a.  給表加上行號

SELECT   *, ROW_NUMBER() OVER(ORDER BY EnrollTime) AS RowNum FROM [dbo].[UserEnroll]

  結果如下:

   UserName EnrollTime RowNum
CC7 2010-05-11 17:38:42.403 1
CC6 2010-05-12 17:38:42.403 2
CC5 2010-05-13 17:38:42.403 3
CC4 2010-05-14 17:38:42.403 4
CC3 2010-05-15 17:38:42.403 5
CC2 2010-05-16 17:38:42.403 6
CC1 2010-05-17 17:38:42.403 7
CC 2010-05-18 17:38:42.403 8

 

 b. 那麼我們刪除RowNum 大於5的記錄 

WITH UserEnrollWithRowNumber AS (SELECT *, ROW_NUMBER() OVER(ORDER BY EnrollTime) ASRowNum FROM [dbo].[UserEnroll])DELETE FROM  UserEnrollWithRowNumberWHERE RowNum >  5

結果為 effect 3 rows

 

 c. 再用a步中的語句查詢報名表結果為

UserName EnrollTime RowNum
CC7 2010-05-11 17:38:42.403 1
CC6 2010-05-12 17:38:42.403 2
CC5 2010-05-13 17:38:42.403 3
CC4 2010-05-14 17:38:42.403 4
CC3 2010-05-15 17:38:42.403 5

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.