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

时间:2020-03-06 15:00:15  来源:igfitidea点击:

我正在使用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'

在这里,我得到的错误消息为:

Subquery cannot return more than one values

我的值是7.50、25.00

我想退还25.00,但是当我使用

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

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

有谁有更好的建议?

解决方案

在什么条件下我们选择选择25.00而不是7.5?

如果它与最大值有关,则可以尝试在该字段上使用MAX()函数。

如果它与添加的按时间顺序排列的最后一行相关,请尝试在datetime字段上使用MAX(),如果我们了解添加该记录的小时和分钟的详细信息。

我们可以尝试以下方法:

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

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

SELECT TOP 1 charge.mistotal FROM收费,其中items.id =收费.id
ORDER BY Charges.id DESC

order by子句将确保它按id的顺序返回,而DESC表示递减,因此它将首先为我们提供最大(最新)的值。当然,TOP 1确保我们只得到那个。

对子查询进行排序。如果要使用" last"值,则需要定义如何确定哪个项目位于最后(请记住,默认情况下,SQL结果集是无序的)。

例如:

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

这将返回25.00而不是7.50(来自上面的数据示例),但是我假设我们希望此值是" last",因为它更大。可能还有其他一些字段对我们来说更有意义;例如,也许我们有一个timestamp列,我们可以对其进行排序以获得最新的值,而不是最大值。关键在于定义"最后"的含义。

因此,我们可以使用反序:

(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?

要首先使用,请选择顶部1 |从表中的第一个*升序到最后一个,只需反转顺序即可。