选择在类别列中具有相同类的记录的子集(n = 1)

时间:2016-10-27 00:21:57

标签: sql sql-server sql-server-2014

过去几天我一直在堆栈如何执行查询。我想从类别首先改变其状态的记录下面的表中进行选择。

Id    Category   Month

1      Start      Jan
2      Start      Feb
3      Middle     Mar
4      Middle     Apr
5      End        May  

从该表中我只想要更改类别的记录。所以我希望SELECT中的表格如下:

Id    Category   Month

1      Start      Jan
3      Middle     Mar
5      End        May  

提前感谢您抽出宝贵时间回答我的问题。

2 个答案:

答案 0 :(得分:3)

为每个类别提取最低ID并获取该记录的月份:

select 
  t1.id, t1.category, t2.month
from (
  select category, min(id) as id
  from yourtable
  group by category
  ) t1
join t2 on t1.id = t2.id and t1.category = t2.category -- second may not be necessary

如果您的id列是唯一的,则不需要使用category的条件。 对于具有最小ID的每个类别,上面的代码都会从month列获得值。

答案 1 :(得分:0)

如果我理解正确,可以使用GROUP BY实现您的目标。

SELECT MIN(id) as ID, Category, MIN(Month) as Month
FROM MyTable
GROUP BY Category