如何在SQL Server中计算序列中组的最小值和最大值?

拉链

我在SQL Server的数据库表中包含以下数据:

Id  Date        Val_A   Val_B   Val_C   Avg     Vector  MINMAXPOINTS
329 2016-01-15  78.09   68.40   70.29   76.50   BELOW   68.40
328 2016-01-14  79.79   75.40   76.65   76.67   BELOW   75.40
327 2016-01-13  81.15   74.59   79.00   76.44   ABOVE   81.15
326 2016-01-12  81.95   77.04   78.95   76.04   ABOVE   81.95
325 2016-01-11  82.40   73.65   81.34   75.47   ABOVE   82.40
324 2016-01-08  78.75   73.40   77.20   74.47   ABOVE   78.75
323 2016-01-07  76.40   72.29   72.95   73.74   BELOW   72.29
322 2016-01-06  81.25   77.70   78.34   73.12   ABOVE   81.25
321 2016-01-05  81.75   76.34   80.54   72.08   ABOVE   81.75
320 2016-01-04  80.95   75.15   76.29   70.86   ABOVE   80.95

MIMMAXPOINTS应实际上包含最低的Val_B,直到Vector'BELOW'与最高的Val_A,直到Vector'ABOVE'因此,我们将在其中具有以下值MINMAXPOINTS

MINMAXPOINTS
68.40
68.40
82.40
82.40
82.40
82.40
72.29
81.75
81.75
81.75

没有光标可能吗?

任何帮助将不胜感激!。

弗拉基米尔·巴拉诺夫(Vladimir Baranov)

在第一应用经典gaps-and-islands以确定组(空白/岛/上方/下方),然后计算MINMAX为每个组。

我认为ID列定义了行的顺序。

在SQL Server 2008上进行了测试。这是SQL Fiddle

样本数据

DECLARE @T TABLE
([Id] int, [dt] date, [Val_A] float, [Val_B] float, [Val_C] float, [Avg] float, 
[Vector] varchar(5));

INSERT INTO @T ([Id], [dt], [Val_A], [Val_B], [Val_C], [Avg], [Vector]) VALUES
(329, '2016-01-15', 78.09, 68.40, 70.29, 76.50, 'BELOW'),
(328, '2016-01-14', 79.79, 75.40, 76.65, 76.67, 'BELOW'),
(327, '2016-01-13', 81.15, 74.59, 79.00, 76.44, 'ABOVE'),
(326, '2016-01-12', 81.95, 77.04, 78.95, 76.04, 'ABOVE'),
(325, '2016-01-11', 82.40, 73.65, 81.34, 75.47, 'ABOVE'),
(324, '2016-01-08', 78.75, 73.40, 77.20, 74.47, 'ABOVE'),
(323, '2016-01-07', 76.40, 72.29, 72.95, 73.74, 'BELOW'),
(322, '2016-01-06', 81.25, 77.70, 78.34, 73.12, 'ABOVE'),
(321, '2016-01-05', 81.75, 76.34, 80.54, 72.08, 'ABOVE'),
(320, '2016-01-04', 80.95, 75.15, 76.29, 70.86, 'ABOVE');

询问

为了更好地了解其工作原理,请检查每个CTE的结果。

CTE_RowNumbers 计算两个行号序列。

CTE_Groups 为每个组分配一个数字(上方/下方)。

CTE_MinMaxMIN/MAX为每个组计算

最终SELECT选择MIN还是MAX要返回。

WITH
CTE_RowNumbers
AS
(
    SELECT [Id], [dt], [Val_A], [Val_B], [Val_C], [Avg], [Vector]
        ,ROW_NUMBER() OVER (ORDER BY ID DESC) AS rn1
        ,ROW_NUMBER() OVER (PARTITION BY Vector ORDER BY ID DESC) AS rn2
    FROM @T
)
,CTE_Groups
AS
(
    SELECT [Id], [dt], [Val_A], [Val_B], [Val_C], [Avg], [Vector]
        ,rn1-rn2 AS Groups
    FROM CTE_RowNumbers
)
,CTE_MinMax
AS
(
    SELECT [Id], [dt], [Val_A], [Val_B], [Val_C], [Avg], [Vector]
        ,MAX(Val_A) OVER(PARTITION BY Groups) AS MaxA
        ,MIN(Val_B) OVER(PARTITION BY Groups) AS MinB
    FROM CTE_Groups
)
SELECT [Id], [dt], [Val_A], [Val_B], [Val_C], [Avg], [Vector]
    ,CASE 
        WHEN [Vector] = 'BELOW' THEN MinB
        WHEN [Vector] = 'ABOVE' THEN MaxA
    END AS MINMAXPOINTS
FROM CTE_MinMax
ORDER BY ID DESC;

结果

+-----+------------+-------+-------+-------+-------+--------+--------------+
| Id  |     dt     | Val_A | Val_B | Val_C |  Avg  | Vector | MINMAXPOINTS |
+-----+------------+-------+-------+-------+-------+--------+--------------+
| 329 | 2016-01-15 | 78.09 | 68.4  | 70.29 | 76.5  | BELOW  | 68.4         |
| 328 | 2016-01-14 | 79.79 | 75.4  | 76.65 | 76.67 | BELOW  | 68.4         |
| 327 | 2016-01-13 | 81.15 | 74.59 | 79    | 76.44 | ABOVE  | 82.4         |
| 326 | 2016-01-12 | 81.95 | 77.04 | 78.95 | 76.04 | ABOVE  | 82.4         |
| 325 | 2016-01-11 | 82.4  | 73.65 | 81.34 | 75.47 | ABOVE  | 82.4         |
| 324 | 2016-01-08 | 78.75 | 73.4  | 77.2  | 74.47 | ABOVE  | 82.4         |
| 323 | 2016-01-07 | 76.4  | 72.29 | 72.95 | 73.74 | BELOW  | 72.29        |
| 322 | 2016-01-06 | 81.25 | 77.7  | 78.34 | 73.12 | ABOVE  | 81.75        |
| 321 | 2016-01-05 | 81.75 | 76.34 | 80.54 | 72.08 | ABOVE  | 81.75        |
| 320 | 2016-01-04 | 80.95 | 75.15 | 76.29 | 70.86 | ABOVE  | 81.75        |
+-----+------------+-------+-------+-------+-------+--------+--------------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Highchart自动计算的最小值和最大值,除非它们高于或低于预定义的最小值和最大值

来自分类Dev

SQL查询最小值和最大值

来自分类Dev

如何选择子集组的最小值和最大值

来自分类Dev

SQL本地最小值和最大值

来自分类Dev

如何在Android的RangeSeekBar中获取当前的最小值和最大值?

来自分类Dev

使用SQL显示组内的最小值和最大值

来自分类Dev

在SQL中以中断序列升/降序对结果分组的最小值/最大值进行分组

来自分类Dev

如何在Mips中打印数组的最大值和最小值

来自分类Dev

如何在Google Visualization Gauge中删除最小值和最大值

来自分类Dev

如何计算R中不同时间序列长度上的最大值和最小值之间的差异?

来自分类Dev

使用dplyr分组时如何计算均值,最小值和最大值?

来自分类Dev

如何在collections.defaultdict中查找最小值和最大值

来自分类Dev

如何在一列中显示最大值和最小值

来自分类Dev

SQL查询最小值和最大值

来自分类Dev

如何在Java中搜索最大值和最小值

来自分类Dev

如何在Android的RangeSeekBar中获取当前的最小值和最大值?

来自分类Dev

在SQL中以中断序列升/降序对结果分组的最小值/最大值进行分组

来自分类Dev

如何在同一My SQL查询中获取ID,最小值和最大值?

来自分类Dev

如何在R的一列中的值序列内找到最大值和最小值?

来自分类Dev

如何计算每个唯一条目的最大值和最小值

来自分类Dev

如何在C ++中获得向量复数值的最大值,最小值和位置?

来自分类Dev

如何在2D数组中搜索最小值和最大值

来自分类Dev

在 SQL Server 中计算日期时间字符串列表中的最小值、最大值和平均值

来自分类Dev

在 SQL Server 2008 R2 中获取每个组的最小值和最大值

来自分类Dev

如何在postgresql中计算最大值,最小值和平均值

来自分类Dev

SQL Server 进程中可以容纳的最小值和最大值是多少

来自分类Dev

如何在 SQL 中获取一组行的最小值和最大值?

来自分类Dev

如何在熊猫数据框中设置最小值和最大值?

来自分类Dev

如何在不使用地图/SQL 的情况下在列表中查找最大值和最小值?

Related 相关文章

  1. 1

    如何使用Highchart自动计算的最小值和最大值,除非它们高于或低于预定义的最小值和最大值

  2. 2

    SQL查询最小值和最大值

  3. 3

    如何选择子集组的最小值和最大值

  4. 4

    SQL本地最小值和最大值

  5. 5

    如何在Android的RangeSeekBar中获取当前的最小值和最大值?

  6. 6

    使用SQL显示组内的最小值和最大值

  7. 7

    在SQL中以中断序列升/降序对结果分组的最小值/最大值进行分组

  8. 8

    如何在Mips中打印数组的最大值和最小值

  9. 9

    如何在Google Visualization Gauge中删除最小值和最大值

  10. 10

    如何计算R中不同时间序列长度上的最大值和最小值之间的差异?

  11. 11

    使用dplyr分组时如何计算均值,最小值和最大值?

  12. 12

    如何在collections.defaultdict中查找最小值和最大值

  13. 13

    如何在一列中显示最大值和最小值

  14. 14

    SQL查询最小值和最大值

  15. 15

    如何在Java中搜索最大值和最小值

  16. 16

    如何在Android的RangeSeekBar中获取当前的最小值和最大值?

  17. 17

    在SQL中以中断序列升/降序对结果分组的最小值/最大值进行分组

  18. 18

    如何在同一My SQL查询中获取ID,最小值和最大值?

  19. 19

    如何在R的一列中的值序列内找到最大值和最小值?

  20. 20

    如何计算每个唯一条目的最大值和最小值

  21. 21

    如何在C ++中获得向量复数值的最大值,最小值和位置?

  22. 22

    如何在2D数组中搜索最小值和最大值

  23. 23

    在 SQL Server 中计算日期时间字符串列表中的最小值、最大值和平均值

  24. 24

    在 SQL Server 2008 R2 中获取每个组的最小值和最大值

  25. 25

    如何在postgresql中计算最大值,最小值和平均值

  26. 26

    SQL Server 进程中可以容纳的最小值和最大值是多少

  27. 27

    如何在 SQL 中获取一组行的最小值和最大值?

  28. 28

    如何在熊猫数据框中设置最小值和最大值?

  29. 29

    如何在不使用地图/SQL 的情况下在列表中查找最大值和最小值?

热门标签

归档