我正在尝试查询数据库,但不包括表中的第一行和最后一行。这是一个示例表:
id | val
--------
1 1
2 9
3 3
4 1
5 2
6 6
7 4
在上面的示例中,我首先要按val
排序,然后排除查询的第一行和最后一行。
id | val
--------
4 1
5 2
3 3
7 4
6 6
这是我想要的结果集。注意第1行和第2行被排除,因为它们分别具有最低和最高val
。
我已经考虑过LIMIT,TOP和其他一些东西,但无法得到我想要的结果。如果有一种方法可以做到(使用第一个/最后一个%而不是第一个/最后一个n更好),我无法弄明白。
答案 0 :(得分:6)
你可以尝试这个伴侣:
SELECT * FROM numbers
WHERE id NOT IN (
SELECT id FROM numbers
WHERE val IN (
SELECT MAX(val) FROM numbers
) OR val IN (
SELECT MIN(val) FROM numbers
)
);
答案 1 :(得分:3)
你可以试试这个:
Select *
from table
where
val!=(select val from table order by val asc LIMIT 1)
and
val!=(select val from table order by val desc LIMIT 1)
order by val asc;
您也可以使用UNION并避免使用2 val!=(查询)
答案 2 :(得分:0)
如果您使用UNION
并排除您不想要的val
,该怎么办?像下面的东西
select * from your_table
where val not in (
select top 1 val from your_table order by val
union
select top 1 val from your_table order by val desc)
答案 3 :(得分:-1)
;WITH cte (id, val, rnum, qty) AS (
SELECT id
, val
, ROW_NUMBER() OVER(ORDER BY val, id)
, COUNT(*) OVER ()
FROM t
)
SELECT id
, val
FROM cte
WHERE rnum BETWEEN 2 AND qty - 1