如何用 select 取得某條件下的最末筆記錄 |
尚未結案
|
syl5439
一般會員 ![]() ![]() 發表:1 回覆:3 積分:0 註冊:2004-11-18 發送簡訊給我 |
我有一個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 發送簡訊給我 |
|
syl5439
一般會員 ![]() ![]() 發表:1 回覆:3 積分:0 註冊:2004-11-18 發送簡訊給我 |
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi syl5439, 試試以下寫法,若 id,dt,seq 型態不為 char 需作型態轉換,長度未定,可以自行補齊(補在左邊),才能達到效果,但資料量大時,效能可能不是很理想
------
Fishman |
syl5439
一般會員 ![]() ![]() 發表:1 回覆:3 積分:0 註冊:2004-11-18 發送簡訊給我 |
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
)
已可解決! 謝謝!!
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |