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

时间:2011-01-14 23:15:58

标签: sql sqlite sql-order-by union 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

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

5 个答案:

答案 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操作就会出现。

请参阅SQL Server: ORDER BY in subquery with UNION了解相关方法。

答案 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函数,如上所示,否则没有必要。