在SQL查询中是否有诸如SELECT LAST之类的东西?

时间:2008-10-02 00:04:04

标签: sql sybase

我正在使用sybase数据库查询每日交易报告。我的脚本中有子查询。

就在这里:

SELECT orders.accountid ,items.x,etc
(SELECT charges.mistotal FROM charges where items.id = charges.id)
FROM items,orders
WHERE date = '2008-10-02'

我在这里收到错误消息:

  

子查询不能返回多个值

我的值是7.50,25.00

我想要返回25.00,但是当我使用

(SELECT TOP 1 charges.mistotal FROM charges where items.id = charges.id)

我的结果是7.50,但我想返回25.00

有没有人有更好的建议?

7 个答案:

答案 0 :(得分:9)

SELECT TOP 1 * 
FROM dbo.YourTable 
ORDER BY Col DESC

在你的情况下,我猜那将是

SELECT TOP 1 charges.mistotal 
FROM charges where items.id = charges.id 
ORDER BY charges.mistotal DESC

答案 1 :(得分:2)

根据您选择的标准选择25.00而不是7.5?

如果它与最大值相关,您可以尝试在该字段上使用 MAX()功能。

如果它与时间顺序最后一行相关,请尝试在日期时间字段中使用 MAX(),如果您有关于它的小时和分钟的详细信息。

答案 2 :(得分:1)

你可以试试这个:

SELECT MAX(charges.mistotal) FROM charges WHERE items.id = charges.id

答案 3 :(得分:1)

那么,你可以使用逆序:

(SELECT TOP 1 charges.mistotal
    FROM charges
    WHERE items.id = charges.id
    ORDER BY charges.mistotal DESC
)

实际上,既然你没有给出明确的命令,那么返回结果的顺序是不确定的,你很幸运它给了你不想要的答案;它可以给你你想要的答案,然后你可能没有注意到它在投入生产之前并不总是正确的。

或者,您可以使用:

(SELECT MAX(charges.mistotal)
    FROM charges
    WHERE charges.id = items.id
)

或者你真的想要SUM吗?

答案 4 :(得分:1)

首先使用select top 1 |首先*从表格 订单升序 获取最后一个,只需忽略您的订单。

答案 5 :(得分:0)

SELECT TOP 1 charges.mistotal FROM charge其中items.id = charges.id 按订单收费.s DESC

order by子句将确保它以id的顺序返回,而DESC意味着降序,因此它将首先为您提供最大(最新)的值。 TOP 1当然要确保你得到那个。

答案 6 :(得分:0)

对子查询进行排序。如果您想要“最后”值,则需要定义如何确定最后一个项目(请记住,默认情况下,SQL结果集是无序的)。

例如:

(SELECT TOP 1 charges.mistotal FROM charges where items.id = charges.id 
 ORDER BY charges.mistotal DESC)

这将返回25.00而不是7.50(来自上面的数据示例),但我假设您希望此值为“最后”,因为它更大。可能还有其他一些领域让你更有意义;例如,您可能有一个时间戳列,您可以对其进行排序以获取最新值而不是最大值。关键是定义“最后”的意思。