选择一列DISTINCT SQL

Org*_*cat 14 sql sql-server coldfusion cfml

补充:使用SQL Server 2000和2005,因此必须同时使用它们.另外,value_rk不是数字/整数(错误:操作数数据类型uniqueidentifier对于min运算符无效)

当我不关心返回的其他列时,有没有办法做单列"DISTINCT"匹配?例:

**Table**
Value A, Value L, Value P
Value A, Value Q, Value Z
Run Code Online (Sandbox Code Playgroud)

我需要根据第一行(值A)中的内容返回其中一行.我仍然需要来自第二和第三列的结果(第二列实际上应该全部匹配,但第三列是唯一的键,我至少需要其中一个).

这是我到目前为止所得到的,尽管它显然不起作用:

SELECT value, attribute_definition_id, value_rk
FROM attribute_values
WHERE value IN (
    SELECT value, max(value_rk)
    FROM attribute_values
)
ORDER BY attribute_definition_id
Run Code Online (Sandbox Code Playgroud)

我在ColdFusion工作,所以如果有一个简单的解决方法,我也会对此持开放态度.我试图限制或"分组"第一列"值".value_rk是我的大问题,因为每个值都是唯一的,但我只需要一个.

注意:value_rk不是数字,因此这不起作用

更新:我有一个工作版本,它可能比纯SQL版本慢一点,但说实话,任何工作在这一点上都比没有好.它从第一个查询获取结果,执行第二个查询,但将结果限制为一个,并获取匹配值的匹配value_rk.像这样:

<cfquery name="queryBaseValues" datasource="XXX" timeout="999">
    SELECT DISTINCT value, attribute_definition_id
    FROM attribute_values
    ORDER BY attribute_definition_id
</cfquery>

<cfoutput query="queryBaseValues">
    <cfquery name="queryRKValue" datasource="XXX">
        SELECT TOP 1 value_rk
        FROM attribute_values
        WHERE value = '#queryBaseValues.value#'
    </cfquery>
    <cfset resourceKey = queryRKValue.value_rk>
    ...
Run Code Online (Sandbox Code Playgroud)

所以你有它,在ColdFusion中明显选择一个列.任何纯SQL Server 2000/2005建议仍然非常受欢迎:)

wal*_*ing 11

这可能有效:

SELECT DISTINCT a.value, a.attribute_definition_id, 
  (SELECT TOP 1 value_rk FROM attribute_values WHERE value = a.value) as value_rk
FROM attribute_values as a
ORDER BY attribute_definition_id
Run Code Online (Sandbox Code Playgroud)

..未经测试.


Bil*_*win 8

SELECT a1.value, a1.attribute_definition_id, a1.value_rk
FROM attribute_values AS a1
  LEFT OUTER JOIN attribute_values AS a2
    ON (a1.value = a2.value AND a1.value_rk < a2.value_rk)
WHERE a2.value IS NULL
ORDER BY a1.attribute_definition_id;
Run Code Online (Sandbox Code Playgroud)

换句话说,找到a1没有行的行,它们a2具有相同value和更大的行value_rk.


Pat*_*ski 8

这应该适用于PostgreSQL,我不知道你使用哪个dbms.

SELECT DISTINCT ON (value)
  value, 
  attribute_definition_id, 
  value_rk
FROM 
  attribute_values
ORDER BY
  value, 
  attribute_definition_id
Run Code Online (Sandbox Code Playgroud)

PostgreSQL文档

  • 这里唯一的问题是MS-SQL不知道DISTINCT ON,只有所有选定列中的DISTINCT ... (4认同)