【问题标题】:Get row with highest number from one column and join rows with same value from another column从一列中获取具有最高编号的行并从另一列中连接具有相同值的行
【发布时间】:2022-10-04 18:23:44
【问题描述】:

我有一个类似结构的大桌子,如下所示......

| version | col1 | col2 |
| ------- | ---- | ---- |
| 1       | val1 | 3243 |
| 2       | val1 | 7542 |
| 3       | val1 | 7322 |
| 4       | val1 | 8632 |
| 1       | val2 | 1948 |
| 2       | val2 | 0491 |
| 1       | val3 | 6282 |
| 1       | val4 | 9283 |
| 2       | val4 | 8272 |
| 3       | val4 | 0029 |
| 4       | val4 | 1279 |

我试图从version 中找到具有最高数值的行,并将col1 中具有相同值的所有行显示为第一行。我想要的输出如下...

| version | col1 | col2 |             | version | col1 | col2 |
| ------- | ---- | ---- |             | ------- | ---- | ---- | 
| 1       | val1 | 3243 |             | 1       | val4 | 9283 |
| 2       | val1 | 7542 |      OR     | 2       | val4 | 8272 |
| 3       | val1 | 7322 |             | 3       | val4 | 0029 |
| 4       | val1 | 8632 |             | 4       | val4 | 1279 |

最后一组行并不重要。仅重要的是选择包含最高版本号的行并与包含相同col1 值的其他行连接。

我的想法是使用以下方法找到第一行:

SELECT a.* FROM (SELECT TOP(1) * FROM table ORDER BY version DESC) a

并加入其他行,但我不知道该怎么做。

谁能帮我写一个查询来实现这些结果之一?

【问题讨论】:

  • 因为有col1 具有“最高”值 (4) 的行如何确定应该返回哪个?
  • 我无法理解您要实现的逻辑。看看你是否可以edit你的问题包括一些详细的解释。另外,为什么您有其他期望的结果?
  • @PM77-1 我已按问题更新。希望它更清楚一点。

标签: sql-server


【解决方案1】:

好吧,我想通了...

SELECT * FROM table a RIGHT JOIN (SELECT TOP(1) * FROM table ORDER BY version DESC) b ON a.col1 = b.col1 ORDER BY a.version

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    相关资源
    最近更新 更多