【问题标题】:SQL: SELECT with UNION, ORDER BY and LIMITSQL:使用 UNION、ORDER BY 和 LIMIT 进行选择
【发布时间】:2011-01-14 23:15:57
【问题描述】:

我收到 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

我希望你能理解我想要做什么并且可以帮助我;-)

【问题讨论】:

  • 适用于 SQLITE:android.database.sqlite.SQLiteException: ORDER BY 子句应该在 UNION 之后而不是之前:

标签: sql sqlite sql-order-by union limit


【解决方案1】:

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

选择 * 从 ( select * from b ORDER BY date asc ) 联盟 选择 * 从 ( select * from b ORDER BY name desc ) 联盟 选择 * 从 ( select * from b ORDER BY gender asc )

【讨论】:

  • 这正是我想要的!我试图弄清楚除了括号之外我还需要什么。
【解决方案2】:

订单将影响整个工会。

无论如何,您似乎想要最接近now 的行。你可以试试这个:

SELECT   time, x, y, z 
FROM     db 
ORDER BY ABS(time - now) ASC
LIMIT    10

【讨论】:

    【解决方案3】:

    在“标准”中(对于“标准”的一些定义)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】:

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

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

      【讨论】:

        【解决方案5】:

        我应用的任何简单解决方案如下:

        SELECT 
         name,
         TO_DATE(date1, 'DD-MON-YYYY HH:MI AM')
        FROM TableX
        
        UNION
        
        SELECT
         name,
         TO_DATE(date2, 'DD-MON-YYYY HH:MI AM')
        FROM TableY
        
        ORDER BY 2 DESC;
        

        这将按第二(日期)列对结果进行排序。

        如果日期列是字符串,可以应用上图的TO_DATE函数,否则不需要。

        【讨论】:

          猜你喜欢
          • 2013-02-06
          • 2011-09-06
          • 1970-01-01
          • 2010-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-26
          • 1970-01-01
          相关资源
          最近更新 更多