刷卡,取每乙個卡號的最後三次記錄的問題

2021-04-02 21:50:50 字數 2934 閱讀 2026

資料庫:mssql表:

icno(卡號)    date(日期)     balance(餘額)  iclineno(卡流水號)

0001           2005/10/01      100            10

0001           2005/10/02       99            11

0001           2005/10/02       98            12

0002           2005/10/01       60            30 

0003           2005/10/01       60            30 

0004           2005/10/02       70            40 

0001           2005/10/03       97            13 

0002           2005/10/02       59            31 

0001           2005/10/04       96            14 

0002           2005/10/02       58            32 

0003           2005/10/02       59            31

0002           2005/10/03       57            33

要求結果:

icno(卡號)    date(日期)     balance(餘額)  iclineno(卡流水號)

0001           2005/10/02       98            12

0001           2005/10/03       97            13

0001           2005/10/04       96            14

0002           2005/10/02       59            31

0002           2005/10/02       58            32

0002           2005/10/03       57            33

0003           2005/10/01       60            30

0003           2005/10/02       59            31

0004           2005/10/02       70            40

想要每乙個卡號(icno)的最後三次記錄,記錄多於三次就取最後三次記錄

-----------------------------------

create table #tab (icno varchar(8) , date datetime,     balance float ,iclineno int ) go

insert into #tab values('0001',           '2005/10/01',      100,           10)

insert into #tab values('0001',           '2005/10/02',       99,            11)

insert into #tab values('0001',           '2005/10/02',       98,            12)

insert into #tab values('0002',           '2005/10/01',       60,            30)

insert into #tab values('0003',           '2005/10/01',       60,            30) 

insert into #tab values('0004',           '2005/10/02',       70,            40) 

insert into #tab values('0001',           '2005/10/03',       97,            13) 

insert into #tab values('0002',           '2005/10/02',       59,            31) 

insert into #tab values('0001',           '2005/10/04',       96,            14) 

insert into #tab values('0002',           '2005/10/02',       58,            32) 

insert into #tab values('0003',           '2005/10/02',       59,            31)

insert into #tab values('0002',           '2005/10/03',       57,            33) go

select * from #tab t

where (select count(date) from #tab where icno=t.icno and iclineno>=t.iclineno)<=3

order by t.icno,t.date

-----------------------------------

注:本來感覺這問題和我前幾天做的那個「取前幾名的例子

」問題一樣呢。後來發現有iclineno(卡流水號)這個字段,這樣出現重複日期的問題就可以處理了,解決了sybase下無top的問題。看來對於某些需求,加個唯一(或者在組內唯一)的字段還是很有必要的

Oracle查詢每乙個使用者的最後乙個登入時間

使用row number over partition by 函式 row number over rank over 和dense rank over 函式的使用下面以班級成績表t2來說明其應用 t2表資訊如下 cfe 2 74 dss 1 95 ffd 1 95 fda 1 80 gds 2 9...

乙個小問題的三次重開

盛宇 採購管理 計稅採購單 js buy in.xml 需求 編輯介面,查詢頁面,主列表頁面增加 客戶發貨日期 字段以及規則 實現 列表頁面 查詢頁面 編輯頁面 還要的就是在select語句中加上這個字段 都是小問題 我以為就這樣ok了。不久之後就重開了,現在都還不記得是怎麼回事,我都不知道這個任務...

乙個草根站長的三次建站經歷

很多人問過我上網有沒有被騙過,我說基本上沒有,唯一的就是做 讓人給騙了2次。一次是在網上一次還是在身邊。我想這不僅僅是利用網路的欺騙,其實更為表現在目前做 的人一種比較普遍的狀態。看似他們是靠技術吃飯其實不然他們更多的是靠嘴吃飯的。揭開製作 之迷,雖然可能會比較淺顯,但是我想物件我這樣利用網路做生意...