获取有关SQL max查询结果的其他信息

时间:2009-12-10 19:37:26

标签: sql sybase

假设我想用SQL(Sybase)执行此操作:查找具有最新时间戳的记录的所有字段。

写一种方法就是这样:

select * from data where timestamp = (select max(timestamp) from data)

这有点傻,因为它导致两个查询 - 首先找到最大时间戳,然后找到该时间戳的所有数据(假设它是唯一的,是的 - 我确实有时间戳索引)。更多它似乎没有必要,因为max()已经找到了我感兴趣的行,所以再次寻找它是浪费。

有没有办法直接访问max()返回的行的字段?

编辑:我看到的所有答案基本上都是聪明的黑客 - 我正在寻找一种语法方式来执行类似max(field1).field2的操作来访问max field1

5 个答案:

答案 0 :(得分:4)

SELECT TOP 1 * from data ORDER BY timestamp DESC

答案 1 :(得分:0)

你能试试吗

SELECT TOP 1 *
FROm    data
ORDER BY timestamp DESC

答案 2 :(得分:0)

您正在假设Sybase如何优化查询。如你所知,它可能正是你想要它做的 - 它可能会注意到两个查询来自“数据”,条件是“where =”,并且可以按照你的建议进行优化。

我知道在SQL Server的情况下,可以配置索引以包含索引行中的字段。通过这样的索引进行选择会使这些字段可用。

答案 3 :(得分:0)

这是SQL服务器,但你会明白这一点。

SELECT TOP(1) * FROM data
ORDER BY timestamp DESC;

答案 4 :(得分:0)

不,使用聚合意味着您正在自动分组,因此即使该组恰好包含一行,也没有一行可以获取数据。

您可以按字段排序并获取第一行:

set rowcount 1
select * from data order by timestamp desc

(请注意,不应使用select *,而应指定查询所需的字段。这会使查询对数据库布局的更改缺乏敏感性。)