因此,我正在一张存储不同公交路线的桌子上工作。每条路线都可以经过不同的位置( ImageView info = findViewById(R.id.boton_infoServer);
info.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewInfoAjustes iconoInfo = new ViewInfoAjustes();
iconoInfo.showDialog(this);
}
});
),并且每条路线经过的顺序由StationId
列确定。
该表如下所示:
StationOrder
我所知道的是我感兴趣的路由。在这种情况下,这些是ID为1和3的路由。我还知道哪个是起始Station,StationId 1我需要选择的是所有具有{ {1}}号高于RouteId | StationId | StationOrder |
------------------------------------
1 | 1 | 2
1 | 2 | 3
1 | 4 | 1
3 | 1 | 1
3 | 2 | 3
3 | 3 | 2
1的StationOrder
号。
我将展示到目前为止我已经尝试过的方法,但是基本上,因为该表包含的路由多于我知道如何选择所需路由的两条路由:
StationOrder
但是在第二部分中,对于每条路由,我需要选择所有StationId
个数字,其中SELECT RS.StationId FROM RouteStations AS RS
WHERE RS.RouteId IN (1,3)
个数字高于StationId 1的StationOrder数字,因此我的SQL知识很短。
答案 0 :(得分:1)
我需要选择的是所有具有StationOrder号的StationId 高于StationId 1的StationOrder号
将这些条件放在WHERE子句中:
SELECT RS.StationId
FROM RouteStations AS RS
WHERE
RS.RouteId IN (1,3)
AND
RS.StationOrder > (
select StationOrder
FROM RouteStations
WHERE RouteId = RS.RouteId AND StationId = 1
)
如果您不希望结果重复,请使用:
SELECT DISTINCT RS.StationId
答案 1 :(得分:1)
作为@forpas答案的替代方法,您可以对表本身进行联接。
SELECT s.StationId
FROM RouteStationsS s
INNER JOIN RouteStation s2 on s.RouteId = s2.RouteId and s.StationOrder > s2.StationOrder
WHERE s2.RouteId IN (1, 3) and s2.StationId = 1
答案 2 :(得分:1)
您可以使用窗口功能来做到这一点:
select rs.*
from (select rs.*,
min(case when stationid = 1 then stationorder end) over (partition by routeid) as stationorder_1
from routestations rs
) rs
where routeid in (1, 3) and
stationorder > stationorder_1;
答案 3 :(得分:0)
如果routeId不重要,请从嵌入式视图中将其删除...
SELECT a.*
FROM routes a
JOIN (
SELECT routeId
, stationId
, max(stationOrder) maxOrder
FROM routes
WHERE stationId = 1
GROUP BY routeId
, stationId
) b ON a.routeId = b.routeId
WHERE a.stationOrder > b.maxOrder