首页 > 解决方案 > 从表中获取摘要结果

问题描述

我有一张桌子:

TestType  TimeStamp             Result
1         2020-06-23 14:20:07Z  1
1         2020-06-23 14:20:07Z  2
1         2020-06-23 14:20:11Z  1
2         2020-06-23 14:20:11Z  1
2         2020-06-23 14:20:11Z  1
2         2020-06-23 14:20:11Z  1
3         2020-06-23 14:20:15Z  2
1         2020-06-23 14:20:23Z  2
1         2020-06-23 14:20:23Z  1

其中结果值为:

1 - Pass
2 - Fail

是否可以编写这样的查询来检索 Result 是最差值的不同行?从上表中,我希望查询返回下一个数据集:

TestType  TimeStamp             Result
1         2020-06-23 14:20:07Z  2
1         2020-06-23 14:20:11Z  1
2         2020-06-23 14:20:11Z  1
3         2020-06-23 14:20:15Z  2
1         2020-06-23 14:20:23Z  2

标签: sqlsql-servertsqlselectgroup-by

解决方案


您可以使用聚合:

select testType, timestamp, max(result) result
from mytable
group by testType, timestamp

如果您需要处理更多值,使用窗口函数可能更简单:

select testType, timestamp, result
from (
    select 
        t.*,
        row_number over(
            partition by testType, timestamp
            order by case result 
                when 3 then 1   -- fail
                when 7 then 2   -- pass
                when 1 then 3   -- unknown
            end
        ) rn
    from mytable t
) t
where rn = 1

推荐阅读