一、表TB,Id字段编号,递增不一定连续,M 字段为区段路费,比如从家到哈尔滨60元,从哈尔滨到长春70元,数值类型, S字段站点名称。 现有500元,从家先经哈尔滨出发,能走多远?
Id M S
1 60 哈尔滨
2 70 长春
3 80 沈阳
4 50 北京
5 90 郑州
6 75 武汉
7 80 长沙
8 90 广东
请用一句sql语句实现。
解析:首先分析出这道题需要求和比较,找到ID然后找出站点位置。所以这个需要用到自连接。根据ID大小作为判断条件。
SELECT B.ID AS BID,B.S AS B_S,B.M AS BM,A.ID AS AID ,A.M AS AM,A.S AS A_S FROM TB A,TB B WHERE A.ID<=B.ID
得到结果如下:
BID B_S BM AID AM A_S
1 哈尔滨 60 1 60 哈尔滨
2 长春 70 1 60 哈尔滨
2 长春 70 2 70 长春
3 沈阳 80 1 60 哈尔滨
3 沈阳 80 2 70 长春
3 沈阳 80 3 80 沈阳
4 北京 50 1 60 哈尔滨
4 北京 50 2 70 长春
4 北京 50 3 80 沈阳
4 北京 50 4 50 北京
5 郑州 90 1 60 哈尔滨
5 郑州 90 2 70 长春
5 郑州 90 3 80 沈阳
5 郑州 90 4 50 北京
5 郑州 90 5 90 郑州
6 武汉 75 1 60 哈尔滨
6 武汉 75 2 70 长春
6 武汉 75 3 80 沈阳
6 武汉 75 4 50 北京
6 武汉 75 5 90 郑州
6 武汉 75 6 75 武汉
7 长沙 80 1 60 哈尔滨
7 长沙 80 2 70 长春
7 长沙 80 3 80 沈阳
7 长沙 80 4 50 北京
7 长沙 80 5 90 郑州
7 长沙 80 6 75 武汉
7 长沙 80 7 80 长沙
8 广东 90 1 60 哈尔滨
8 广东 90 2 70 长春
8 广东 90 3 80 沈阳
8 广东 90 4 50 北京
8 广东 90 5 90 郑州
8 广东 90 6 75 武汉
8 广东 90 7 80 长沙
8 广东 90 8 90 广东
进行分组求和然后找到求和小于500的最大ID的第一条记录即可
SELECT TOP 1 B.ID,B.S,SUM(A.M) AS sum_m FROM TB A,TB B
WHERE A.ID<=B.ID
GROUP BY B.ID,B.S
HAVING SUM(A.M)<=500
ORDER BY B.ID DESC