开发者

Extract values of a sorted request with SQL

I have this sql table with people's name and ages.

Bob     28
Bryan   30
Jim     25
John    42
Bill    22
Sam     28
Tom     26

I would开发者_如何学Go like to make a sql command to order all people by age desc, find a name in it, a return the preceding one, the founded and the next one with their position.

For example, admit that I would like to find Tom, my request should return :

Name    Age     Rank
Jim     25      2
Tom     26      3
Bob     28      4

Jim has the number 2 because Bill is the youngest

Is it possible to do something like this ?

Thanks in advance for any help


SQL isn't suited for row-based operations. There's no easy way to do "find a row where some condition(s) = true, then return the previous row" in a single query. You can do it in a couple steps, though:

a) Run one query to retrieve 'Tom' and his age (26).

b) Run another query to get the next older person
SELECT name, age FROM ... WHERE age > 26 ORDER BY age ASC LIMIT 1

c) Repeat but for next younger:
SELECT name, age FROM ... WHERE age < 26 ORDER BY age DESC LIMIT 1

This'll fetch people who are at least 1 year old/younger... You don't specify what happens if there's multiple people of the same age (e.g. There's Fred who's also 26, or Doug and Elmer who are both 25), so I'm ignoring those conditions.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜