sql - SQL Server - 创建在行中具有 2 个最大值的子集表
问题描述
我有一个只有一行的表(11 列)。它包含以下记录:
ID Data_Type Value1 Value2 Value3 Value4 Value5 Value6 Value7 Value8 Value9
1 A_1 08/03/2020 08/03/2020 08/03/2020 08/02/2021 08/02/2021 08/02/2021 08/09/2022 08/09/2021 08/09/2024
我需要一个包含以下记录的子表(只有 2 列具有最新的日期值)
ID Data_Type Value9 Value7
1 A_1 08/09/2024 08/09/2022
请帮忙。
解决方案
您可以使用APPLY
然后使用一些聚合逻辑来反透视数据:
select t.id, t.data_type, v.*
from t cross apply
(select max(case when seqnum = 1 then date end) as date_1,
max(case when seqnum = 1 then value end) as date_1,
max(case when seqnum = 2 then date end) as date_2,
max(case when seqnum = 2 then value end) as date_2
from (select v.*, row_number() over (order by value desc) as seqnum
from (values (t.value1, 'value1'),
(t.value2, 'value2'),
(t.value3, 'value3'),
. . .
) v(date, value)
) v
) v;
非常重要的注意事项:这增加了四列,而不是两列。具有最大值和倒数第二个值的列的名称位于单独的列中。如果使用动态 SQL,则只能控制列的名称。
以上将在一行上正常工作。但它也适用于多行。
推荐阅读
- python - 如何更改 xlabel 的 pandas DataFrame.plot 字体大小?
- html - Visual Studio Code Live Server 看起来很棒,但 CSS 未在浏览器中加载
- c++ - 数组大小扣除
- javascript - render_template 没有重定向到 Flask 中的另一个页面
- php - 将变量从视图文件传递到另一个视图文件
- delay - 我们可以为 dspic33ep256mu814 控制器的 mplab 中的 xc16 中的 _delay_ms 添加延迟函数的限制是多少?
- python - 你如何执行一个makefile来重新编译django oscar assets?
- java - 了解 Hibernate 连接表
- ssh - 无法通过 SSH 连接到 vmware esxi 6.7 主机
- javascript - 使用循环查找下一个回文