联合 Select 来自排序 table
Union Select from sorted table
我想同时从已排序的 table 中执行多个 SELECT。我的想法如下:
SELECT TOP 5 * FROM unsorted_table where parameter1 = 1 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
UNION
SELECT TOP 5 * FROM unsorted_table where parameter1 = 2 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
但是由于ORDER BY,显然是行不通的。我也试过这个,但没有成功:
SELECT TOP 5 * FROM (SELECT * FROM unsorted_table where where parameter1 = 1 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC)
UNION
SELECT TOP 5 * FROM (SELECT * FROM unsorted_table where where parameter1 = 2 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC)
如果我使用以下内容,因为它在此处的其他线程上被推荐,我没有得到我需要的东西,因为 table 排在最后:
SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 1
UNION
SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 2
ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
另一个限制是,我可能无法创建新的 table。因此,将排序后的 table 保存在新的 table 中并从那里进行选择也没有任何选择。
使用子查询试试这个:
select * from
(SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 1
UNION
SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 2)a
ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
尝试使用 WITH:
WITH xy AS (
SELECT TOP 5 *
FROM unsorted_table
WHERE parameter1 = 1 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
),
yz AS (
SELECT TOP 5 *
FROM unsorted_table
WHERE parameter1 = 2 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
)
SELECT * FROM xy
UNION
SELECT * FROM yz
你似乎想要 :
select u.*
from (select *, row_number() over (partition by parameter1 order by parameter2 desc, paramter3 desc, parameter4) seq
from unsorted_table
where parameter1 in (1,2)
) u
where seq <= 5;
我想同时从已排序的 table 中执行多个 SELECT。我的想法如下:
SELECT TOP 5 * FROM unsorted_table where parameter1 = 1 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
UNION
SELECT TOP 5 * FROM unsorted_table where parameter1 = 2 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
但是由于ORDER BY,显然是行不通的。我也试过这个,但没有成功:
SELECT TOP 5 * FROM (SELECT * FROM unsorted_table where where parameter1 = 1 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC)
UNION
SELECT TOP 5 * FROM (SELECT * FROM unsorted_table where where parameter1 = 2 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC)
如果我使用以下内容,因为它在此处的其他线程上被推荐,我没有得到我需要的东西,因为 table 排在最后:
SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 1
UNION
SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 2
ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
另一个限制是,我可能无法创建新的 table。因此,将排序后的 table 保存在新的 table 中并从那里进行选择也没有任何选择。
使用子查询试试这个:
select * from
(SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 1
UNION
SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 2)a
ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
尝试使用 WITH:
WITH xy AS (
SELECT TOP 5 *
FROM unsorted_table
WHERE parameter1 = 1 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
),
yz AS (
SELECT TOP 5 *
FROM unsorted_table
WHERE parameter1 = 2 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
)
SELECT * FROM xy
UNION
SELECT * FROM yz
你似乎想要 :
select u.*
from (select *, row_number() over (partition by parameter1 order by parameter2 desc, paramter3 desc, parameter4) seq
from unsorted_table
where parameter1 in (1,2)
) u
where seq <= 5;