如何从 SQL Server 中的同一列中查找多个最大值

Posted

技术标签:

【中文标题】如何从 SQL Server 中的同一列中查找多个最大值【英文标题】:How to find multiple maximum value from same column in SQL Server 【发布时间】:2021-12-04 18:19:22 【问题描述】:

这是我的数据

id day op hi lo cl per_chng gt
1 2007-01-01 1.95805 1.96417 1.95765 1.96332 -0.26842287553 0
2 2007-01-02 1.9633 1.97418 1.9604 1.97295 -0.48911528421 0
3 2007-01-03 1.97301 1.9749 194814 195169 1.0923865982814 1
4 2007-01-04 1.95165 1.95296 1.9398 1.94258 0.466904837896 1
5 2007-01-05 1.94251 1.94316 192633 1929 0.700362882322442 1
6 2007-01-07 1.93033 1.93057 1.92907 1.92932 0.05235005079 0
7 2007-01-08 1.92938 1.94023 1.92608 1.93087 -0.5407578858 0
8 2007-01-09 1.93985 1.94527 1.93852 1.9388 0.054157210645 0
9 2007-01-10 1.93881 1.94205 1.93148 1.93187 0.3592374228 0
10 2007-01-11 1.932 1.95336 1.93169 1.94305 -0.61472774505 0
11 2007-01-12 1.94392 1.96036 1.94268 1.95893 -0.766234628 0
12 2007-01-14 1.95938 1.96019 1.95791 1.95992 -0.027552144 0
13 2007-01-15 1.9598 1.96676 1.95697 1.96309 -0.2133412084 0
14 2007-01-16 1.96413 19702 1.959 1.96069 0.17544843906001 0
15 2007-01-17 1.96068 19722 1.96035 1.97015 -0.48067406035 0
16 2007-01-18 1.97022 1.97776 1.96364 1.97388 -0.185421606 0
17 2007-01-19 1.97382 1.97662 1.9696 1.97335 0.0238173664 0
18 2007-01-21 1.9738 1.97444 1.97288 1.97365 0.007600131735 0
19 2007-01-22 1.97367 197857 1.97169 1.97647 -0.1416667088 0
20 2007-01-23 1.97655 1.99145 1.97652 1.98179 -0.264407429 0
21 2007-01-24 1.98181 1.98299 1.96464 19677 0.717080855821 1
22 2007-01-25 1.96757 1.97307 1.96245 1.96495 0.1333367261 0
23 2007-01-26 1.96485 1.96771 1.95576 1.95005 0.2060618667 0
24 2007-01-28 1.95969 1.96137 1.95824 1.96096 -0.064764197 0
25 2007-01-29 1.96095 1.96123 1.95482 1.96108 -0.006629 0

我想找到High 列的多个最高值。

例如,我想查找High 列索引 1-14、2-15、3-16、4-17、5-18、6-19 的最大值。

如何也使这个值的不同列?

【问题讨论】:

请避免发布图片。使用格式化文本。你的问题也不清楚。请同时显示预期结果 看来你需要一个 SQL 窗口函数。但这是一个猜测。恕我直言,您的问题并不清楚。请edit提供更多详细信息,或询问其他人。 【参考方案1】:

您可以为此使用分析/窗口函数。

SELECT
  *,
  MAX(high) OVER (
    ORDER BY time
    ROWS BETWEEN CURRENT ROW AND 13 FOLLOWING
  )
    AS rolling_14_max_high
FROM
  your_data

这将取当前行及其 13 个后续行的最大值(按时间排序时)。

【讨论】:

【参考方案2】:

您可以为此使用窗口函数。 OFFSET 子句将跳过前 13 行

SELECT *,
  MaxHigh = MAX(High) OVER (ORDER BY Time ROWS BETWEEN 13 PRECEDING AND CURRENT ROW)
FROM YourTable t
OFFSET 13 ROWS FETCH 10000000 ROWS ONLY;

【讨论】:

【参考方案3】:

您可以使用带有要搜索最大值的范围的起始索引:-

DECLARE @startIndex INT = 5 -- Starting Index
DECLARE @recods INT = 15 -- Number of next rows (Range)

SELECT MAX([Time]) FROM (SELECT [Time]
FROM YouTable
ORDER BY [Time]
OFFSET @startIndex ROWS FETCH NEXT @recods ROWS ONLY) T

【讨论】:

只生成一个输出行,操作显然想要几个,作为滚动窗口。

以上是关于如何从 SQL Server 中的同一列中查找多个最大值的主要内容,如果未能解决你的问题,请参考以下文章

Linq - 从 SQL Server 中的 nvarchar 类型列中查找最大值

与同一列中的多个值进行比较?

如何从多个布尔列中检查至少一个为真或所有列值在 SQL Server 中为假

从同一个表中的多个列中选择不同的值

SQL server 如何查找库中两个表中是不是包含相同的信息?

如何根据多个条件从 SQL Server 中删除大量数据