从另一列的 MIN() 和 MAX() 值创建计算字段,按唯一 ID 分组

时间:2021-03-28 20:11:41

标签: sql sql-server tsql

我有一个看起来像这样的表格,其中包含有关对象位置及其存在时间(年龄)的信息:

Date        ID  Age x   y
2021-03-25  20  1   531 295
2021-03-25  20  2   478 272
2021-03-25  20  3   421 272
2021-03-26  20  1   478 286
2021-03-26  21  1   903 342

我正在尝试选择某个 ID 的 x 位置,当年龄处于该 ID 的最小值(名为 xStart 的列)时,它处于最大值(名为 xFin 的列)。每天的 ID 代表不同的对象,因此 25 日的 ID 20 与 26 日的 ID 20 不会是同一个对象。

我希望结果表看起来像这样:

 Date           ID  Age x   y   xStart xEnd
 2021-03-25     20  1   531 295 531    421
 2021-03-25     20  2   478 272 531    421
 2021-03-25     20  3   421 272 531    421
 2021-03-26     20  1   478 286 478    some number
 2021-03-26     21  1   903 342 908    some other number

该表可以为每个 ID 分组:

   Date         ID  MAX(Age) xStart xEnd
   2021-03-25   20  3        531    421
   2021-03-26   20  1        478    some number
   2021-03-26   21  1        908    some other number

1 个答案:

答案 0 :(得分:0)

如果我理解,您可以使用窗口函数:

select distinct date, id,
       max(age) over (partition by date, id),
       first_value(x) over (partition by date, id order by age) as xstart,
       first_value(x) over (partition by date, id order by age desc) as xend
from t;