我收到错误,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
我希望你明白,我正在努力做什么,可以帮助我; - )
答案 0 :(得分: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 )
答案 1 :(得分:7)
订单将影响整个联盟。
无论如何,看起来你想要最接近now
的行。你可以试试这个:
SELECT time, x, y, z
FROM db
ORDER BY ABS(time - now) ASC
LIMIT 10
答案 2 :(得分:4)
这不是它的工作原理,至少在MySQL中(你没有指定)。选择数据并执行所有UNION,GROUP BY等后,ORDER操作就会出现。
答案 3 :(得分:4)
在“标准”中(对于“标准”的某些定义)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
如何限制结果集中的行数可能因SQL实现而异。
答案 4 :(得分:2)
我申请的任何简单解决方案如下:
{{1}}
按第二个(日期)列对结果进行排序。
如果日期列是字符串,您可以应用TO_DATE函数,如上所示,否则没有必要。