2014-09-19 102 views
0

我有一个查询SELECT tbl.id, tbl.data FROM tbl WHERE ...)返回这样的数据:选择第一行每个ID

1 | c 
1 | b 
1 | a 
2 | f 
2 | e 
2 | g 
3 | z 
3 | i 

我希望有查询这些结果返回每个ID的第一项:

1 | c 
2 | f 
3 | z 

我会写这个查询吗?

编辑:对不起,我已经完善了这个问题 - 现在应该清楚了。

+1

。 。对问题的“细化”已使第一版本的答案无效。在(正确)答案发布之后更改问题并不好。 – 2014-09-19 15:01:49

+0

你如何定义“第一”?一般而言,您需要为元素提供某种顺序,否则它们可以以系统选择返回的顺序返回 – 2014-09-19 15:02:51

+0

@GordonLinoff - 不确定我是否同意这一点,我的问题是第一行...没有任何事情可做与数据...答案都是使用聚合函数,因为他们根据数据做出了假设。 – Cheetah 2014-09-19 15:03:50

回答

0
SELECT tbla.id ,MIN(tbl.data) FROM tbla GROUP BY tbla.id 
+0

这将简单地返回前3行不是吗?这不是我想要的。 – Cheetah 2014-09-19 14:57:21

+0

是的,你说得对。我只想尽可能快地回答。第一个是错的:(对不起,那个 – 2014-09-19 14:58:17

+0

我很抱歉,我没有问我的问题很好,请看编辑。 – Cheetah 2014-09-19 15:01:16

0
SELECT DISTINCT tbl.id, tbl.data FROM tbl WHERE x=y 
+0

对不起,我的问题措辞不太好,我改了它 – Cheetah 2014-09-19 15:01:38

0

我们可以通过ID对数据进行分区,并从该组获得每个ID只能有一个数据值。

SELECT id, data 
FROM 
(SELECT id, 
     data, 
     ROW_NUMBER() OVER (PARTITION BY id order by data) as seq 
    FROM tableA 
) T 
where T.seq =1 
+0

我的Sybase版本ASE不支持'Row_Number()...' – Cheetah 2014-09-19 15:25:41

+0

Ozan的答案在这种情况下会起作用 – radar 2014-09-19 15:38:37