【发布时间】:2021-05-06 12:25:23
【问题描述】:
我有一个由 UNION 查询生成的数据集,该查询聚合了来自 2 个来源的数据。
我想根据是否仅在这些来源中找到数据来选择该数据,或两者兼而有之。
集合的数据相关部分是这样的,还有很多其他的列:
| row | preference | group | position |
|---|---|---|---|
| 1 | 1 | 111 | 1 |
| 2 | 1 | 111 | 2 |
| 3 | 1 | 111 | 3 |
| 4 | 1 | 135 | 1 |
| 5 | 1 | 135 | 2 |
| 6 | 1 | 135 | 3 |
| 7 | 2 | 111 | 1 |
| 8 | 2 | 135 | 1 |
[preference] 列与[group] 列相结合是我要过滤的内容,我想为每个[group] 返回具有与MIN([preference]) 相同[preference] 的所有行
根据上述数据,所需的输出将是第 1 -> 6 行
[preference] 列表示UNION 查询中数据的原始来源,因此合法数据集可能如下所示:
| row | preference | group | position |
|---|---|---|---|
| 1 | 1 | 111 | 1 |
| 2 | 1 | 111 | 2 |
| 3 | 1 | 111 | 3 |
| 4 | 2 | 111 | 1 |
| 5 | 2 | 135 | 1 |
在这种情况下,所需的输出将是第 1、2、3 和 5 行
我想不通的是怎么做(不是真正的代码):
SELECT * WHERE [preference] = MIN([preference]) PARTITION BY [group]
【问题讨论】:
-
您是否尝试使用像
SELECT [group], min(preference) AS minPref FROM... GROUP BY [group]这样的子查询,然后简单地对该子查询执行内部联接?
标签: sql-server tsql group-by