⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_48227.htm

📁 一些关于vc的问答
💻 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp; 2<BR>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp; 3<BR>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;54&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp; 1<BR>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp; 1<BR>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;43&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp; 1<BR>6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<BR>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;43&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; 3<BR>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;53&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; 2<BR>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; 3<BR>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; 1<BR>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;53&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3<BR>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;41&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<BR><BR>gpsid,longtitude,latitude,gpstime<BR>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32.8&nbsp;&nbsp;&nbsp;&nbsp;2001-10-21<BR>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.6&nbsp;&nbsp;&nbsp;&nbsp; 2001-10-21<BR><BR>我想问的是如何取出每个gpsid对应的field值排前4的csid,field,latitude,longitude<BR>如上表该取出<BR>csid&nbsp;&nbsp;,field,longtitude,latitude<BR>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;54&nbsp;&nbsp;&nbsp;&nbsp; 12.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32.8<BR>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;43&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32.8<BR>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;43&nbsp;&nbsp;&nbsp;&nbsp; 12.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32.8<BR>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32&nbsp;&nbsp;&nbsp;&nbsp; 12.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32.8<BR>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;53&nbsp;&nbsp;&nbsp;&nbsp; 3.3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.6<BR>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;53&nbsp;&nbsp;&nbsp;&nbsp; 3.3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.6<BR>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;41&nbsp;&nbsp;&nbsp;&nbsp; 3.3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.6<BR>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32&nbsp;&nbsp;&nbsp;&nbsp; 3.3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&nbsp;&nbsp; tab1 A, tab2 B <BR>WHERE A.gpsid = B.gpsid(+);<BR><BR>Note:&nbsp;&nbsp;(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&nbsp;&nbsp;* from TAB1 <BR>join TAB2&nbsp;&nbsp; on tab1.gsid=tab2.gsid where tab1.field in<BR>(select&nbsp;&nbsp;DISTINCT top 4&nbsp;&nbsp;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>&nbsp;&nbsp; RANK() OVER (PARTITION BY tab1.gpsid order by tab1.field desc) as rk<BR>&nbsp;&nbsp;from tab1,tab2 where tab2.gpsid=tab1.gpsid) t where t.rk&lt;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&nbsp;&nbsp;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&nbsp;&nbsp; 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 + -