SQL查询以获取具有某些父ID和两个附加条件的所有记录

时间:2019-05-28 13:38:54

标签: sql sql-server

因此,我正在一张存储不同公交路线的桌子上工作。每条路线都可以经过不同的位置( 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知识很短。

4 个答案:

答案 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