全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:872
推到 Plurk!
推到 Facebook!

如何用 select 取得某條件下的最末筆記錄

尚未結案
syl5439
一般會員


發表:1
回覆:3
積分:0
註冊:2004-11-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-18 16:47:32 IP:211.76.xxx.xxx 未訂閱
我有一個table, 欄位是 ID,DAT,SEQ,MNY (以 ID,DAT,SEQ 排序) 現要取出 ID = 'A100' 及 ID = 'B100' 且 DAT 在 '20040831' 之前的最末筆記錄, 請問在連 SQL Server 資料庫下要如何下 SELECT 指令? (連 ACCESS 的 MDB 的方式已有了, 不過不能用在 SQL Sever 下) ID DAT SEQ MNY ==== ======== ==== ========== A100 20040101 0001 1000 A100 20040101 0002 1200 A100 20040210 0001 1000 A100 20040210 0002 1000 ..... A100 20040830 0001 1000 A100 20040830 0002 1000 A100 20040830 0003 1000 <- 要取此筆 A100 20040910 0001 1000 ..... B100 20040101 0001 1000 ..... B100 20040829 0001 1000 B100 20040829 0002 1000 <- 要取此筆 B100 20040905 0001 1000 ..... ==> SELECT 所得結果為: ID DAT SEQ MNY ==== ======== ==== ========== A100 20040830 0003 1000 B100 20040829 0002 1000 共兩筆
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-18 18:35:48 IP:221.169.xxx.xxx 未訂閱
try try.... select * from table group by id order by seq desc
syl5439
一般會員


發表:1
回覆:3
積分:0
註冊:2004-11-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-18 23:16:28 IP:211.76.xxx.xxx 未訂閱
謝謝暗神的回答! 不過我要的不是只回傳一筆, 而是每個 ID 一筆(僅一筆, 最末那筆) ==> select * from table group by id order by seq desc 會回傳每個 ID 多筆
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-19 08:38:38 IP:210.65.xxx.xxx 未訂閱
Hi syl5439,    試試以下寫法,若 id,dt,seq 型態不為 char 需作型態轉換,長度未定,可以自行補齊(補在左邊),才能達到效果,但資料量大時,效能可能不是很理想 < class="code"> select * from yourtable t1 where (right(' ' t1.id,10) right(' ' t1.dat,10) right(' ' t1.seq,10) = (select max(right(' ' t1.id,10) right(' ' t1.dat,10) right(' ' t1.seq,10) from yourtable2 t2 where t2.id = t1.id and t2.dt <= '20040831') 發表人 -
------
Fishman
syl5439
一般會員


發表:1
回覆:3
積分:0
註冊:2004-11-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-19 12:41:55 IP:211.76.xxx.xxx 未訂閱
fishman 你好! 依照回覆所言:(語法有改過) select * from yourtable t1 where (right(' ' t1.id,10) right(' ' t1.dat,10) right(' ' t1.seq,10) = (select max(right(' ' id,10) right(' ' dat,10) right(' ' seq,10) ) from yourtable2 t2 where t2.id = t1.id and t2.dat <= '20040831') 卻會出現一大堆記錄, 而不是每個 ID 僅一筆(最末筆)... 不過我找到另一位網友(阿利)提供的指令: select * from dabin b where exists( select id,dat,max(seq) as seq from dabin a where exists( select id,max(dat) as dat from dabin where dat<='20040831' and id in('A100','B100') group by id having a.id=id and max(dat)=a.dat ) group by a.id,a.dat having b.id=id and b.dat=dat and max(seq)=b.seq ) 已可解決! 謝謝!!
系統時間:2024-06-26 6:34:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!