SQL:使用UNION,ORDER BY和LIMIT进行SELECT

Tob*_*ias 5 sql sqlite union sql-order-by limit

我得到的错误是ORDER by应该在UNION之后出现,但是我希望这些错误在订购之前被排序为一个然后限制为10.

SELECT * 
  FROM (SELECT time, x, y, z 
          FROM db 
         WHERE time >= now 
      ORDER by time, x
       UNION 
       SELECT time, x, y, z 
         FROM db 
        WHERE time < now 
     ORDER by time, x) 
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

我希望你明白,我正在努力做什么,可以帮助我;-)

小智 22

如果您在SQLite中有一个非常复杂的查询但需要使用UNION进行排序,那么您可以尝试

select * from (
    select * from b ORDER BY date asc
    )
UNION
select * from (
    select * from b ORDER BY name desc
    )
UNION
select * from (
    select * from b ORDER BY gender asc
    )


And*_*mar 7

订单将影响整个联盟.

无论如何,看起来你想要最接近的行now.你可以试试这个:

SELECT   time, x, y, z 
FROM     db 
ORDER BY ABS(time - now) ASC
LIMIT    10
Run Code Online (Sandbox Code Playgroud)


Nic*_*rey 5

在“标准”(对于“标准”的某些定义)SQL;

select top 10 *
from (       select time,x,y,z from db where time > now
       union select time,x,y,z from db where time < now
     ) t
order by t.time
Run Code Online (Sandbox Code Playgroud)

如何限制结果集中的行数可能因 SQL 实现而异。


cor*_*ard 3

这不是它的工作原理,至少在 MySQL 中(你没有指定)。ORDER 操作是在选择数据并且执行了所有 UNION、GROUP BY 等之后进行的。

有关解决此问题的方法,请参阅SQL Server:子查询中的 ORDER BY 和 UNION 。