注册 登录
编程论坛 SQL Server论坛

有关 SQL server 2000查询 的问题?

伊人醉 发布于 2011-11-09 20:51, 617 次点击
某货运站的数据库,其中存放以下四个表:
货车(货车编号,车牌,出厂日期,司机,最大运输量)
司机(司机编号,姓名,联系方式,驾驶证日期)
货物(货物编号,货物名称,产地,单价,货物总量)
运输记录(运输单编号,货车编号,货物编号,运输量,交易类型,运输日期)
试用SQL语言完成下列功能:
1建表,在定义中要求声明:(5分)
(1)    每个表的主外码;
(2) 时间日期的数据类型是datetime;
(3) 运输量,货物总量,各种数量大于等于0,驾车年龄在0和40年之间,外码不能为空。2往表中插入数据(5分)
货车(001,东风,2008-7-2,101,50000
002,解放,2004-5-4,102,70000
003,五菱,2003-2-6,103,150000
004,五十铃,2009-9-10,105,75000
005,长安,2010-8-2,106,65000
006,东风,2011-1-26,104,80000)
司机(101,张三,139,2001-1-5
102,李四,152,1998-2-15
103,唐二,187,1999-6-23
104,江五,133,2002-4-14
105,牛六,189,2005-5-12
106,郭七,135,2009-7-6)
货物(201,苹果,山东,4,300000
202,香蕉,海南,4,400000
203,桔子,江西,5,550000
204,蜜柚,广东,4.5,450000)
运输记录(1,001,201,40000,运入,2009-1-9
2,002,201,60000,运出,2009-1-10
3,003,204,100000,运入,2009-2-1
4,001,204,45000,运出,2009-4-2
5,004,202,72000,运出,2009-4-2
6,003,202,120000,运出,2009-4-2
7,002,203,55000,运入,2009-4-5
8,004,202,65000,运出,2009-4-5
9,005,204,40000,运入,2009-4-8
10,006,203,70000,运出,2009-5-1
11,005,204,50000,运入,2009-5-1
12,006,203,75000,运出,2009-5-8)
3.用SQL语句完成下列查询:(10分*3=30分)
(2)找出同一辆货车两次运输间隔时间第二长的货车编号、车主及车主联系方式。
4 回复
#2
zhouixi2011-12-14 14:42
select 货车编号,车主,车主联系方式 from 表名
 where  exists(select  top 2 (运出时间-运入时间) as 时间 FROM  表名
 order by  时间 desc)AS 表别名  这样可以吗?
#3
pxr2011-12-15 21:21
新手,进来看看。
#4
johnjiang2011-12-20 11:26
Sql2005中的语句:
SELECT cid,sname,tel FROM car,Driver WHERE car.did=Driver.did and car.cid=(SELECT cid FROM(
SELECT a.cid,DATEDIFF(day,b.mindate,a.maxdate)AS val, ROW_NUMBER()OVER( ORDER BY DATEDIFF(day,b.mindate,a.maxdate) DESC)AS row
FROM( SELECT cid,MAX(ldate)AS maxdate FROM TrafficLog GROUP BY cid)a,(SELECT cid,MIN(ldate)AS mindate FROM TrafficLog GROUP BY cid)b
WHERE a.cid=b.cid
)c WHERE c.row=2)

如果是sql2000的话,请将ROW_NUMBER方法换成top的方式,即:
SELECT cid,sname,tel FROM car,Driver WHERE car.did=Driver.did and car.cid=(SELECT TOP 1 cid FROM ( SELECT TOP 2 * FROM(
SELECT a.cid,DATEDIFF(day,b.mindate,a.maxdate)AS val
FROM( SELECT cid,MAX(ldate)AS maxdate FROM TrafficLog GROUP BY cid)a,(SELECT cid,MIN(ldate)AS mindate FROM TrafficLog GROUP BY cid)b
WHERE a.cid=b.cid
)c ORDER BY val DESC)d ORDER BY d.val ASC)
#5
panxingren2011-12-21 20:04
赞同4楼。
1