sql - 如何从 SQL Server 2014 中的指定行获取指定数量的先前行?

标签 sql sql-server tsql sql-server-2014

在 SQL Server 2014 中的以下数据集中,我如何选择价格 >= 2/1/2014,然后选择 2/1/2014 之前的 7 行?

Date        Price
2014-01-23  10269.389648
2014-01-24  10034.44043
2014-01-27  9981.349609
2014-01-28  10066.839844
2014-01-29  9962.919922
2014-01-30  10048.69043
2014-01-31  9967.650391
2014-02-03  9741.580078
2014-02-04  9816.969727
2014-02-05  9809.030273
2014-02-06  9940.219727
2014-02-07  10055.339844
2014-02-10  10050.400391

我可以轻松地在 WHERE 子句中获取 >= 2/1 的行,但我不确定如何选择前面的 5 行,因为日期不连续。我无法使用 2 月 1 日之前 5 天的开始日期,因为我需要 2 月 1 日之前指定的价格数量。如果我只减去 2 月 1 日之前的 7 天,我将无法获得正确的价格/行数。

最佳答案

以下是使用 ROW_NUMBER 获取 2014-02-01 之前的前 7 条记录的方法:

;With Previous As
(
    Select  Date, Price, Row_Number() Over (Order By Date Desc) RN
    From    Table
    Where   Date < '2014-02-01'
),
Cur As
(
    Select  Date, Price
    From    Table
    Where   Date >= '2014-02-01'
)
Select  Date, Price
From    Cur
Union All
Select  Date, Price
From    Previous
Where   RN <= 7

关于sql - 如何从 SQL Server 2014 中的指定行获取指定数量的先前行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32747546/

相关文章:

mysql - 完成 MAX() 但使用更多表中的数据

c++ - 在 MSSQL 查询中使用 C++ 变量

sql-server - SQL Server 2008 脚本 - 如何从系统获取当前日期并将其存储到日期列中

sql - 对树数据进行分组、聚合和求和的最佳方法是什么?

mysql - 使用 Ruby on Rails 进行安全/更好的 SQL 查询

java - oracle Jdbc更新语句返回零

sql-server - 将 bcp 放入带有另一个 sql 语句的事务中

sql - SQL Server中存在重复行时如何选择具有最大值的行

sql - INT 数据库字段如何与 VARCHAR 类型进行比较

mysql - 具有多个不同标准的 UNION SELECT,其中没有真正的 FK