作者bobju (寶貝豬)
看板Database
標題Re: [SQL ] 查詢資料表時透過列運算過濾資料
時間Fri Apr 3 08:37:07 2009
除了"撈資料出來運算後, 再將結果插回另一個表"這種通用的做法外,
針對這個案還有一種"直接(但特殊)做運算, 再將結果插到另一個表"
的做法.
假設number是'遞增且規律的', 可以利用它來做'假性外鍵'(概念上),
用來連結相鄰兩筆記錄, 使其在同一列, 然後就可以直接拿兩個time
欄位做比較, 決定要保留或去除. 若number不符合這個規律, 那麼採用
列號亦可, 不過'列號'這東西就對資料庫有依附性, 不同廠商的資料庫
對於列號的支援度及SQL語法稍有不同, 缺乏適用性. 所以這只是玩
SQL語法而已, 並沒有比較好用. 以下還是稍微解說一下我的想法:
假設number是遞增且規律, 就是相鄰兩列都只差一, 沒有跳號的狀況:
select R1.*
from records as R1
left join records as R2 on R2.number=R1.number+1
where mysql函式(R2.time-R1.time>=3min)
[插入到另一個結構相同,內容為空的表].
※ 引述《yiyuanli (阿災)》之銘言:
: 請問
: 我在Acceess裡 有個主資料表
: 假設有幾筆資料和欄位如下
: [item] [number] [day] [time]
: 1 001 2009/04/02 下午 01:12:00
: 1 002 2009/04/02 下午 01:22:00
: 1 003 2009/04/02 下午 01:23:00
: 1 004 2009/04/02 下午 01:33:00
: 1 005 2009/04/02 下午 01:34:00
: 1 006 2009/04/02 下午 01:35:00
: 1 007 2009/04/02 下午 01:39:00
: 1 008 2009/04/02 下午 01:40:00
: 我想要的規則是 第一筆跟第二筆 時間去比
: 因為 01:22:00 - 01:12:00 = 00:10:00 >=3min 所以第一筆的資料會保留
: 然後 二跟三做運算 因為沒有符合 >=3min 所以 第二筆會被去除
: 再來 三跟四做運算 符合 >=3min 所以 第三筆會被保留
: 以此類推
: 簡單來說就是 1跟2結果 符合(>=3min) 1保留
: 2跟3結果 不符合 2去除
: 3跟4結果 符合 3保留
: 查詢結果應該是要
: [item] [number] [day] [time]
: 1 001 2009/04/02 下午 01:12:00
: 1 003 2009/04/02 下午 01:23:00
: 1 006 2009/04/02 下午 01:35:00
: 請問Access想要得到上述結果該怎麼做?
: 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.104.186.206
推 yiyuanli:可惜 我的表是當天的醫師看診情形 會有跳號的情況 04/03 12:52
推 yiyuanli:感謝回答 把欄位下一筆的data當作新的欄位就可做換算 04/03 13:09
推 yiyuanli:我會試看看 再次感謝幫助我的你 04/03 13:15