sql查询中是否有诸如SELECT LAST之类的东西?
我正在使用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 |从表中的第一个*升序到最后一个,只需反转顺序即可。