用于查找特定类别的表中的下一个id的SQL查询

时间:2011-10-04 15:07:49

标签: mysql sql sql-server

我有一张这样的桌子..

 Categories table
    -------------------
    ID Cat_Name
    1   cat1
    2   cat2
    3   cat3

Stations table
------------------
ID Sta_Name Cat_ID
1   sta1     1
2   sta2     3
3   sta3     2
4   sta4     1
5   sta5     1
6   sta6     3

现在我需要将唯一ID输入为1(即第一行第一列),所以现在我想要输出4

因为该类别中的下一个项目是4

我认为下一个项目在类别1中得到1,4,6,9 id,所以现在我输入6现在输出必须是9,因为如果我输入输入9,则类别1中6的下一项是9输出必须返回1

4 个答案:

答案 0 :(得分:1)

如果我理解一个好的方法会......

仅考虑“电台表”和当前电台ID

-- the one for next station
SELECT MIN(ID) as next FROM `stations` WHERE Cat_ID = {desidered_Cat_ID} AND ID > {your_current_ID} LIMIT 1;

-- the one for previous station
SELECT MAX(ID) as prev FROM `stations` WHERE Cat_ID = {desidered_Cat_ID} AND ID < {your_current_ID} LIMIT 1;

希望这有帮助。

答案 1 :(得分:0)

我不确定“next”的含义,订单是如何确定的。无论如何,这是基本方法:

select t2.ID
from MyTable t1
inner join MyTable t2 on t1.Cat_ID = t2.Cat_ID and t1.ID <> t2.ID

答案 2 :(得分:0)

select t2.id 
from mytable t1
inner join mytable t2 on t2.cat_id = t1.cat_id and t2.id > t1.id
limit 1

答案 3 :(得分:0)

与其他人一样有点不清楚.. 1是你想要通过与ID 1相同的类别找到下一个ID的ID(因此ID 4也是相同的Cat_ID 1)?我会试试

select MIN( S2.ID ) as NextID
   from
      Stations S1
         JOIN Stations S2
            on S1.Cat_ID = S2.Cat_ID
           AND S2.ID > S1.ID
   where
      S1.ID = IDYouAreInterestedIn

我已重命名表和别名以匹配您的新表编辑...在这种情况下,“S1”和“S2”是“站点”表的“别名”。

Join命令基于表之间的相同类别,但另外,只包括第二个实例中ID大于您开始的ID的记录(在您的情况下,您正在寻找1) ..你不想返回1作为你开始的1条记录的答案。你想要的第一个号码就在你所在的号码之后。

所以,从你最新的样本......

Stations table
------------------
ID Sta_Name Cat_ID
1   sta1     1
2   sta2     3
3   sta3     2
4   sta4     1
5   sta5     1
6   sta6     3


IF you enter    The next ID would be
ID = 1            4   (both category 1)
ID = 2            6   (the next instance of category 3)
ID = 3            No record found... no other "2" category
ID = 4            5   (first ID after 4 but same "1" category)
ID = 6            No record since nothing after 6 in the list.