作者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
1F:推 yiyuanli:可惜 我的表是当天的医师看诊情形 会有跳号的情况 04/03 12:52
2F:推 yiyuanli:感谢回答 把栏位下一笔的data当作新的栏位就可做换算 04/03 13:09
3F:推 yiyuanli:我会试看看 再次感谢帮助我的你 04/03 13:15