Oracle SQL - 最后获取记录

时间:2011-05-22 06:59:19

标签: sql oracle oracle11g

SELECT * FROM
(
SELECT city from addr_tab
UNION ALL
SELECT 'zzzz' AS city from dual
)ORDER BY city

我使用上述方法检索'zzzz'作为表的最后一条记录。但我不认为这会一直有效,因为这个城市在理论上可能比按字母顺序排在“zzzz”之上。是否还有其他强大的方法可以将这条录制的记录作为最后一张唱片?我需要这个用于使用oracle报告进行报告。任何帮助都是最受欢迎的。

3 个答案:

答案 0 :(得分:4)

添加另一个虚拟列(order_col)以用于订购。 查询将最终结果如下。

SELECT * FROM
(
SELECT city, 1 as order_col from addr_tab
UNION ALL
SELECT 'zzzz', 2 as order_col AS city from dual
)ORDER BY order_col, city

这样你可以保证'zzzz'永远是最后一个,因为主要排序列(order_col)保证'zzzz'的值低于所有其他记录的值。

答案 1 :(得分:1)

嗯,正如其他人所说(评论和回答),从一开始就有可能有更好的方法来解决问题;但如果你需要暂时的黑客阅读!...

随时随地拨打最后一条记录...
'zzzz'很好......
然后使用自定义ORDER BY,如:

SELECT * 
  FROM (
       SELECT city 
         FROM addr_tab
       UNION ALL
       SELECT 'zzzz' AS city 
         FROM dual
       )
ORDER BY 
    CASE WHEN city = 'zzzz' THEN 1 ELSE 0 END,
    city;

答案 2 :(得分:0)

这可以通过以下查询来解决

 SELECT * FROM 
 ( SELECT city from addr_tab order by city)
   UNION ALL 
  SELECT 'zzzz' from dual;

现在又有了另外一种风格

with 
b1 as 
(
SELECT city from addr_tab order by city
)
select city from b1
union all 
SELECT 'zzzz' from dual;

所以你可以使用任何人......