在id = somevalue,(id> somevalue)之后选择10条记录,如果id = somevalue不存在则选择前10条记录

时间:2014-12-29 21:48:36

标签: sql postgresql

我有一个SQL查询,它在id = somevalue之后选择10条记录,但是如果记录不存在,我想选择前10条记录。查询位于以下结构中。

SELECT * FROM TABLE WHERE ID > x ORDER BY METRIC LIMIT 10

提供,这里的id是一个varchar字段,它根据某个字段进行排序。

2 个答案:

答案 0 :(得分:1)

这接近你想要的:

SELECT *
FROM TABLE
ORDER BY (CASE WHEN ID > X THEN 1 ELSE 0 END) DESC,
         METRIC
LIMIT 10

它将始终返回10条记录(假设表中至少有10条记录)。它将首先放置id > x的那些。如果没有足够的那些,那么它将填写其他记录。

答案 1 :(得分:-1)

这也有效:

SELECT TOP 10 col1, col2
FROM #yourtable
WHERE col1 > @ID
UNION ALL
SELECT TOP 10 col1, col2
FROM #yourtable
WHERE NOT EXISTS (SELECT * FROM #yourtable WHERE col1 = @ID)

但是,假设您有一个ID,您可以使用大于/小于查询所需的ID来查询所需的"接下来的"记录。此外,您可能需要添加一个" ORDER BY"确保记录具有所需值的子句。