📄 subject_48227.htm
字号:
<p>
序号:48227 发表者:六子 发表日期:2003-07-29 15:24:57
<br>主题:请教一个sql命令怎么写
<br>内容:有两张表tab1(csid,field,gpsid,timeslot),tab2(gpsid,longtitude,latitude,gpstime)<BR>表tab1和表tab2以gpsid相关联,表2中的gpsid是主键,表2中同一个gpsid有若干csid和field对应,例如:<BR>csid,field,gpsid,timeslot<BR>1 32 1 2<BR>2 25 1 3<BR>3 54 1 1<BR>4 23 1 1<BR>5 43 1 1<BR>6 12 1 2<BR>7 43 1 3<BR>1 53 2 2<BR>2 32 2 3<BR>3 25 2 1<BR>4 53 2 3<BR>5 41 2 2<BR><BR>gpsid,longtitude,latitude,gpstime<BR>1 12.0 32.8 2001-10-21<BR>2 3.3 5.6 2001-10-21<BR><BR>我想问的是如何取出每个gpsid对应的field值排前4的csid,field,latitude,longitude<BR>如上表该取出<BR>csid ,field,longtitude,latitude<BR>3 54 12.0 32.8<BR>5 43 12.0 32.8<BR>7 43 12.0 32.8<BR>1 32 12.0 32.8<BR>1 53 3.3 5.6<BR>4 53 3.3 5.6<BR>5 41 3.3 5.6<BR>2 32 3.3 5.6<BR><BR><BR>这个select语句该怎么写?赶快替我想想,很急!<BR>多谢!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:小雅 回复日期:2003-07-29 15:54:30
<br>内容:SELECT A.csid,A.field,B.latitude,B.longitude <BR>FROM tab1 A, tab2 B <BR>WHERE A.gpsid = B.gpsid(+);<BR><BR>Note: (Based on Oracle)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:郭文明 回复日期:2003-07-29 16:34:48
<br>内容:select * from TAB1 <BR>join TAB2 on tab1.gsid=tab2.gsid where tab1.field in<BR>(select DISTINCT top 4 tab1.field from tab1 order by tab1.field DESC)<BR>测试通过
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:may_fang 回复日期:2003-07-29 17:16:23
<br>内容:在oracle里面用rank() over....函数<BR>才能取每个gpsid对应的前4条记录,并且要按照tab1.field降序排列才可以.下面的sql已经通过测试,这是基于oracle的.<BR>select t.csid,t.field,t.longtitude,t.latitude from (SELECT tab2.gpsid,tab1.csid,tab1.field,tab2.longtitude,tab2.latitude, <BR> RANK() OVER (PARTITION BY tab1.gpsid order by tab1.field desc) as rk<BR> from tab1,tab2 where tab2.gpsid=tab1.gpsid) t where t.rk<5<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:六子 回复日期:2003-07-29 17:39:48
<br>内容:to wagrcsby:我试过你的方法,好象不对,我要选的是每个gpsid都取出field 值排前四的记录,而不是所有记录中field值排前四的。<BR><BR>to may_fang and year:因为我用的是sql server ,所以没法试你们的方法,不过还是很感谢两位的热心帮助!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:利 回复日期:2003-07-29 18:42:24
<br>内容:SELECT A.csid,A.field,B.latitude,B.longitude <BR>FROM tab1 A, tab2 B <BR>WHERE A.gpsid = B.gpsid<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:郭文明 回复日期:2003-07-30 18:16:44
<br>内容:就你的要求,暂时我还没有想出其他一两句sql语句能够实现,不过有一点我肯定实现,那就是写存储过程,用游标,将各项放入临时表,再返回<BR>你要的记录集,如果你一定要,而且你目前不会写,给我回复
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:kf 回复日期:2003-07-30 20:42:17
<br>内容:楼主的4<BR>应该是每个表的前两个字段.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:六子 回复日期:2003-07-30 21:13:15
<br>内容:觉得只有may_fang的方法可能是对的,所以接受她的为答案,谢谢大家的热心帮助,特别是郭兄的帮助!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -