SQL语句之 SOS定位救师徒

1.需求:  话说  唐僧师徒四人,正过大雪山,  唐僧饿了,吩咐悟空去弄斋饭,悟空一个筋斗云飞开了。
                   突然,大风呼啸,雷鸣闪电,八戒和唐僧在慌乱中被雪山老妖抓走。
                  沙和尚到处寻找师徒下落无果。无奈之下,去找菩萨。
                   先前唐僧和八戒受菩萨所托,都带了一个SOS定位手表。
                  不管在那里,只要发送SOS信号,就可以把当前的经纬度发送给菩萨。

                  这雪山老妖势力范围大,方圆几百里都是他的妖洞,还真有点能耐,  唐僧和八戒 被这个洞卷到那个洞,
                  匆匆忙忙的,唐僧和八戒在每个妖洞里,都发送了SOS求救信息。
                  弄得 菩萨都不知 唐僧的下落,。    现在要你用SQL语句把最新的SOS记录给菩萨看。
                  每人只需要显示最新的一条SOS信息。

                  
 --  SOS求救信息,放在一个叫SOSInfo的表里面。
CREATE TABLE SOSInfo
( 
LoginID  VARCHAR(30) NOT NULL,  --用户id 目前规定在6-16个字符之间
PosTime     VARCHAR(48) NOT NULL, --采集时间:YYYY-MM-DD HH24:MI:SS
Latitude  VARCHAR(30) ,  --纬度       
Longitude  VARCHAR(30) ,          --经度 
SOSPhone        VARCHAR(16) , --sos求救号码
IsCheck         INTEGER, --是否已经查看
PRIMARY KEY  (LoginID,PosTime)
); 
--插入几条SOS求救信息
 insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) 
values('沙和尚','2013-04-17 12:11:33','23.2352635','30.2356855','15689584587',0)

insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) 
values('孙悟空','2013-04-17 11:11:33','23.2352635','30.2356855','15689584587',0)

insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) 
values('猪八戒','2013-04-17 10:11:33','23.2352635','30.2356855','15689584587',0)

insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) 
values('猪八戒','2013-04-19 13:11:33','23.2352635','30.2356855','15689584587',0)

insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) 
values('沙和尚','2013-04-17 14:11:33','23.2352635','30.2356855','13689584587',0)

insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) 
values('唐僧','2013-04-17 19:11:33','29.2352635','30.2356855','15789584587',0)

insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) 
values('唐僧','2013-04-17 11:11:33','26.2352635','30.2356855','15789584587',0)

insert into SOSInfo([LoginID],[PosTime],[Latitude],[Longitude],[SOSPhone],[IsCheck]) 
values('唐僧','2013-04-17 18:11:33','24.2352635','30.2356855','15789584587',0)

--很显然,唐僧和猪八戒 耐不住 寂寞  发 SOS 求救了,但是  被妖怪这个洞搬到那个洞,
  经纬度经常改变,让没筋斗云功夫的  沙和尚 很苦恼。


--因为数据要最后一起返回一个DataTable,而不是一个DataSet,所以我们打算用一个表变量
declare @Users table([LoginID] [varchar](30) NOT NULL, 
                                       [PosTime] [varchar](48) NOT NULL,
                                    [Latitude] [varchar](30) NULL,
                          [Longitude] [varchar](30) NULL,
                          [SOSPhone] [varchar](16) NULL,
                          [IsCheck] [int] NULL) 
                         declare @name varchar(50)
                         declare cursor1 cursor for       
                        select distinct LoginID from SOSInfo             
                         open cursor1                       --打开游标
 
                         fetch next from cursor1 into @name  --将游标向下移1行,获取的数据放入之前定义的变量@name中
 
                         while @@fetch_status=0      
                         begin
            ---插入到表变量
                         insert into @Users  ([LoginID], [PosTime],[Latitude],
                            [Longitude],
                            [SOSPhone],
                            [IsCheck])
                           select top 1 [LoginID],
                                  [PosTime],
                                  [Latitude],
                                  [Longitude],
                                  [SOSPhone],
                                  [IsCheck]
                             from SOSInfo
                            where LoginID = @name
                            order by PosTime desc
                         fetch next from cursor1 into @name  --将游标向下移1行
                         end
                -----把所有最新的SOS选择出来
                         select [LoginID],
                                [PosTime],
                                [Latitude],
                                [Longitude],
                                [SOSPhone],
                                [IsCheck]
                           from @Users
                         close cursor1                   --关闭游标
                         deallocate cursor1

菩萨用这个SQL查询到了师徒下落

原文地址:https://www.cnblogs.com/HCCZX/p/3026305.html