asp.net 正在从数据库中检索最后一个值-是否应对结果进行排序?

siv3szwd  于 2023-01-10  发布在  .NET
关注(0)|答案(4)|浏览(118)

数据库存储给定日期的货币兑换率。每天收集一个货币兑换值并将其存储在数据库中,如下所示:
| ID(整数,AI)|价值|日期|
| - ------|- ------|- ------|
| 1个|二、五|二○二一年一月二十日|
| 第二章|二、七|二零二一年一月二十一日|
| 三个|二、六|二零二一年一月二十二日|
如果我想计算最近10天的平均汇率,我是否应该先按日期排序,然后在下载数据时只取用最后10条记录,还是只从数据库下载最后10条记录而不进行排序?

0s7z1bwu

0s7z1bwu1#

您可以简单地在SQL Server数据库中进行

SELECT TOP 10 AVG(VALUE) AS AverageRate
FROM YourTable
ORDER BY Id DESC

概念应与其他关系数据库相同。

wa7juj8i

wa7juj8i2#

**SQL中的表(以及视图和CTE等表表达式)表示 * 无序集 *。*要按特定顺序获取数据, 必须 * 指定ORDER BY子句。

在相当通用的SQL中,您可以执行以下操作

SELECT AVG(VALUE) AS AverageRate
FROM (
    SELECT VALUE
    FROM YourTable AS t
    ORDER BY Id DESC
    OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
) AS t

在某些RDBMS中,您可以使用LIMITTOP来代替OFFSETFETCH,以达到相同的效果。

w41d8nur

w41d8nur3#

你可以用两种方法来做。
如果你使用SQL和Dapper或者ADO.NET,那么你可以写一个查询。如果你需要最后10个值,它应该被排序

SELECT TOP 10 AVG(your value) AS average
FROM YourCurrencyExchangeTable
ORDER BY DATE DESC

如果使用的是EntityFrameWorkCore,则可以编写

var avg = db.yourDbContext
        .Where(c => c.Date >= tenDaysAgoDate)
        .Average(c => c.yourValue)

我希望我的回答能有所帮助:)

shyt4zoc

shyt4zoc4#

基本上,您必须首先排序(按日期),然后获取最后10个值,所以您的方向是正确的。

相关问题