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
)
订单将影响整个联盟.
无论如何,看起来你想要最接近的行now.你可以试试这个:
SELECT time, x, y, z
FROM db
ORDER BY ABS(time - now) ASC
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
在“标准”(对于“标准”的某些定义)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 实现而异。
这不是它的工作原理,至少在 MySQL 中(你没有指定)。ORDER 操作是在选择数据并且执行了所有 UNION、GROUP BY 等之后进行的。
有关解决此问题的方法,请参阅SQL Server:子查询中的 ORDER BY 和 UNION 。