Sql Sybase在一列上选择distinct,不关心其他列

Sql Sybase在一列上选择distinct,不关心其他列,sql,distinct,aggregate-functions,sybase,Sql,Distinct,Aggregate Functions,Sybase,我见过许多类似的问题,但没有一个完全符合我的需要,而且我似乎无法从检查其他问题中推断出一个解决方案 我有下面的(模拟)表格。我的实际表有更多的列 TableA: ID | color | feel | size | alive | age ------------------------------------------ 1 | blue | soft | large | true | 36 2 | red | soft | large | true

我见过许多类似的问题,但没有一个完全符合我的需要,而且我似乎无法从检查其他问题中推断出一个解决方案

我有下面的(模拟)表格。我的实际表有更多的列

TableA:

ID  | color | feel   | size   | alive | age
------------------------------------------
1   | blue  | soft   | large  | true  | 36
2   | red   | soft   | large  | true  | 36
2   | blue  | hard   | small  | false | 37
2   | blue  | soft   | large  | true  | 36
2   | blue  | soft   | small  | false | 39
15  | blue  | soft   | medium | true  | 04
15  | blue  | soft   | large  | true  | 04
15  | green | soft   | large  | true  | 15
40  | pink  | sticky | large  | true  | 83
51  | brown | rough  | tiny   | false | 01
51  | gray  | soft   | tiny   | true  | 59
34  | blue  | soft   | large  | true  | 02
我希望结果如下所示:

Result of query on TableA:

ID  | color | feel   | size   | alive | age
-------------------------------------------
1   | blue  | soft   | large  | true  | 36
2   | red   | soft   | large  | true  | 36
15  | blue  | soft   | medium | true  | 04
40  | pink  | sticky | large  | true  | 83
51  | brown | rough  | tiny   | false | 01
34  | blue  | soft   | large  | true  | 02
我希望每个唯一ID列对应一行,但不希望检查其他列。我需要结果集中返回的其他列,但我不想对它们进行筛选。我只需要一个唯一的ID行-我不在乎哪一行

在我的示例中,我选择了每个唯一ID的第一行

我尝试过不同的方法

select * 
from TableA 
group by ID having ID = max(ID)
我看到的大多数GROUPBY和max和/或min函数示例只涉及2列。不过,我还有很多专栏

我也看到过使用CTE的示例,但我没有使用SQL Server(我使用的是Sybase)

如何实现所描述的结果集

编辑


我们使用的是Sybase版本15.1。

有多种方法可以做到这一点。如果您有较新版本的Sybase,可以使用
行号()


我提出的解决方案如下

这“感觉”像是一个糟糕的解决方案——我仍然愿意接受新的答案:

SELECT
    ID,
    min(color),
    min(feel),
    min(size),
    min(alive),
    min(age)
FROM TableA
group by ID

我不喜欢对每一列应用
min
函数的冗长程度,但这会返回所需的结果集

使用MIN的解决方案有一些缺点。它不会返回特定的行,而是返回行组中的最小值。您可以获取不在数据库中的结果行。对你合适吗

sybase 15.2中支持行号


如果15.1中不支持它,那就很遗憾了。您可以使用标识列和临时表来实现所需功能。

我们部门正在升级到15.1…:(我在这些文档中没有看到行号:sybase是否支持此功能?这看起来像MS SQL Server要澄清的是,这在我们使用的sybase版本(15.1)上不起作用)。@tmckown…使用“sybase”作为数据库标记几乎是无用的,因为人们经常使用的版本太多了。这里有一个确实支持此功能的版本:。@SoylentGreen…您的Sybase版本是否支持
rowid
?但这会将不同行的值放在同一行上。这似乎没有多大意义。如果您绝对不支持如果是关于这些列的内容,但确实需要返回某些内容,那么也可以返回null。
SELECT
    ID,
    min(color),
    min(feel),
    min(size),
    min(alive),
    min(age)
FROM TableA
group by ID