線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:951
推到 Plurk!
推到 Facebook!

如何在資料庫中搜尋最接近的資料

尚未結案
ado
一般會員


發表:16
回覆:16
積分:6
註冊:2004-11-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-21 09:54:12 IP:61.220.xxx.xxx 未訂閱
請問各位大大~~ 我資料庫中有一資料欄位是顯示日期的,我要找出最接近今天日期的那一筆資料該怎麼做ㄋ,我用的資料庫是oracle,請各位大大幫忙解答喔~~
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-21 10:22:09 IP:211.20.xxx.xxx 未訂閱
select * from Table1 Where xxDATE = (select max(xxDATE) from Table1 where xxDATE <= sysdate) 原理: 1.取出<=今日的最大日期資料 2.再挑出這一天的資料 P.S:若你的欄位格式不是Date,自行用 To_Date(... 去轉換 若不能run,請報出你的資料庫版本和table及欄位名稱、type
ado
一般會員


發表:16
回覆:16
積分:6
註冊:2004-11-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-22 13:41:26 IP:220.134.xxx.xxx 未訂閱
    感謝folkchen大大ㄉ回應,不過我還是不大懂ㄟ,語法還是一直會有錯,麻煩folkchen再幫我看看喔~~    我ㄉ資料: table:vw_roomarrange_gp 名稱              空值?    類型 ----------------------- -------- ----- STUDENTID      NOT NULL   VARCHAR2(10) DORMID         NOT NULL   CHAR(1) ROOMID         NOT NULL   VARCHAR2(10) STARTDATE                 VARCHAR2(10) ENDDATE                   VARCHAR2(10)    假設資料是這樣: STUDENTID  D ROOMID     STARTDATE  ENDDATE ---------- - ---------- ---------- ---------- 000001     C 203        2004/12/01 2004/12/03 000001     C 205        2005/03/09 2005/03/12 000002     C 207        2005/01/12 2005/01/15 000002     C 211        2005/04/12 2005/04/13 000003     C 301        2004/11/20 2005/11/22 000003     C 305        2005/04/25 2005/04/27 000003     C 307        2005/06/15 2005/06/17 000004     C 803        2004/09/20 2004/09/22 000004     C 909        2005/04/25 2003/04/27 000005     C 912        2004/05/22 2004/05/20    我要找出STUDENTID=000003這個人,ENDDATE最接近且>=今日日期的這筆資料,也就是 000003     C 305        2005/04/25 2005/04/27 這筆資料 請問該怎麼寫呢? 我的資料庫是oracle 9i, 麻煩folkchen了~感激不盡~ 
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-22 13:51:22 IP:211.20.xxx.xxx 未訂閱
因為你的 ENDDATE 是 VARCHAR2 所以要用 to_date 去轉換型態 select * from vw_roomarrange_gp where ENDDATE = (select max(ENDDATE) from vw_roomarrange_gp where to_date(ENDDATE,'YYYY/MM/DD') <= system)
yu_blake
一般會員


發表:0
回覆:23
積分:14
註冊:2003-01-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-25 09:34:46 IP:218.163.xxx.xxx 未訂閱
抱歉 插個花..    假設資料是這樣: STUDENTID D ROOMID STARTDATE ENDDATE ---------- - ---------- ---------- ---------- 000001 C 203 2004/12/01 2004/12/03 000001 C 205 2005/03/09 2005/03/12 000002 C 207 2005/01/12 2005/01/15 000002 C 211 2005/04/12 2005/04/13 000003 C 301 2004/11/20 2005/11/22 000003 C 305 2005/04/25 2005/04/27 000003 C 307 2005/06/15 2005/06/17 000004 C 803 2004/09/20 2004/09/22 000004 C 909 2005/04/25 2003/04/27 000005 C 912 2004/05/22 2004/05/20 你要找出 STUDENTID =000003 這一群裡面 ENDDATE 大於現在的日期 並且是 最接近現在的日期 可以 寫如下語法 select min(to_date(ENDDATE,'YYYY/MM/DD')) //最小的日期 from vw_roomarrange_gp where to_date(ENDDATE,'YYYY/MM/DD') >= sysdate //大於等於現在日期 and STUDENTID='000003' //鎖定000003這一群 hope helpful. --
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-25 09:53:10 IP:211.20.xxx.xxx 未訂閱
真的是我沒有看清楚你要的東東 yu_blake 的寫法才是對的 真抱歉~~
ado
一般會員


發表:16
回覆:16
積分:6
註冊:2004-11-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-25 11:01:10 IP:220.134.xxx.xxx 未訂閱
    感謝folkchen和yu_blakeㄉ熱心解答, 我已經做出來嚕~ 真ㄉ太感謝ㄌ! 不過得分者只能有一ㄍ真是可惜, 請folkchen見諒喔~~ 真ㄉ非常感謝兩位~~
系統時間:2024-04-29 13:25:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!