sql – 选择没有唯一键的单行

前端之家收集整理的这篇文章主要介绍了sql – 选择没有唯一键的单行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一张这样的桌子
  1. Fld1 Fld2 Fld3
  2. ------------
  3. 0 1234 ABC
  4. 0 1235 DEF
  5. 1 1236 GHI
  6. 2 1236 JKL
  7. 3 1236 MNO
  8. 4 1237 PQR
  9. 5 1237 STU
  10. 6 1237 VWX

请注意,这两列都不是唯一的. Fld1 = 0可能有很多行,但对于所有其他值,Fld1将是唯一的,并且可能有许多行具有Fld2的相同值.

我需要为Fld2的每个值选择一行,其中Fld 1中的值最高.因此基于上述数据的结果将是

  1. Fld1 Fld2 Fl4
  2. ------------------
  3. 0 1234 ABC
  4. 0 1235 DEF
  5. 3 1236 MNO
  6. 6 1237 VWX

解决方法

GROUP BY的替代方法是使用像 row_number()这样的窗口函数来获得结果.此函数通过Fld2对数据进行分区并通过Fld1 desc对其进行排序来创建唯一编号:
  1. select Fld1,Fld2,Fld3
  2. from
  3. (
  4. select Fld1,Fld3,rn = row_number() over(partition by fld2 order by fld1 desc)
  5. from yourtable
  6. ) d
  7. where rn = 1;

请参阅SQL Fiddle with Demo.如果您有其他唯一的列,有时使用row_number会更容易.这给出了一个结果:

  1. | Fld1 | Fld2 | Fld3 |
  2. |------|------|------|
  3. | 0 | 1234 | ABC |
  4. | 0 | 1235 | DEF |
  5. | 3 | 1236 | MNO |
  6. | 6 | 1237 | VWX |

猜你在找的MsSQL相关文章