选择最低的 ID 并计算与最低的偏差

FiN*_*FiN 7 sql-server sql-server-2014

我正在尝试创建一个视图。我的 SQL Server 数据库中有一些数据,我想按它们mark1mark2. 现在,当我对它们进行排序时,我想选择mark1谁最低,mark2并计算与其他mark1s的偏差是多少。表格现在看起来像这样,但没有偏差。

|   mark1    |    mark2    |      mass    ||    deviation |
|:-----------|------------:|:------------:||:------------:|
| 0001       |      10000  |     10,0     ||    min0001   |
| 0001       |      15000  |     12,0     ||    +20%      |
| 0002       |      11200  |     18,0     ||    min0002   |
| 0002       |      13000  |     35,5     ||    +97.2%    |
| 0002       |      14565  |     85,5     ||    375%      |
| 0003       |      15004  |     15,4     ||    min0003   |
| 0003       |      21250  |     17,4     ||    +12.9%    |
| 0003       |      60764  |     16,4     ||    6.49%     |
Run Code Online (Sandbox Code Playgroud)

现在,如您所见,它是由mark1and排序的mark2。现在,我的问题是偏差列,我需要它mark1,让我们说0001(他mark210000)并找到最低质量并找到与其他000115000)的偏差。正如你在表中看到的。

Mik*_*son 8

FIRST_VALUE (Transact-SQL)

返回 SQL Server 2014 中有序值集中的第一个值。

按 进行分区mark1和排序mark2

像这样的事情应该为你做:

select T.*,
       100 * (T.mass - T.FirstMass) / T.FirstMass as Deviation
from (
     select T.*,
            first_value(T.mass) over(partition by T.mark1 order by T.mark2) as FirstMass
     from dbo.YourTable as T    
     ) as T;
Run Code Online (Sandbox Code Playgroud)

SQL小提琴

  • 米凯尔打败了我:) (2认同)