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