我有一个包含A,B和C列的表。A列可能有重复项。
我需要一个查询,该查询将为我提供一个在A列中具有唯一值的结果集,并且我不在乎它需要哪种重复。
我对其余数据一无所知。
一个示例可能是:
A B C 1 8 8 1 7 7 2 10 10
在这种情况下,我想选择:
A B C 1 x x 2 10 10
x =选择哪个值无关紧要。
亲切的问候,
马蒂亚斯·万斯(Matthias Vance)
编辑
我以为我找到了解决方案:
SELECT * FROM ( SELECT * FROM test GROUP BY a ) table_test;
但这毕竟没有用。
这将导致:
[Microsoft][ODBC Excel Driver] Cannot group on fields selected with '*'
试试这个:
select A, B, C from test x where not exists (select * from test y where y.A = x.A and (y.B < x.B or (y.B = x.B and y.C < x.C)) order by A
但是由于它包含相关的子查询,因此它可能很慢。(OTOH,从理论上讲,数据库引擎至少有可能将其优化为我在下面显示的内容。)
SQL之外的东西呢?您将如何处理结果?
如果要使用某些程序来处理它,为什么不这样做:
select A, B, C from test order by A, B, C
然后执行以下操作:
prev_a = None for a, b, c in get_query_result(): if a != prev_a: prev_a = a yield (a, b, c)
在您的应用程序中?
我不知道PHP,但是我想它应该是这样的:
$query = "SELECT a,b,c FROM test ORDER BY a,b,c"; $result = odbc_exec($connect, $query); $prev_a = NULL; # I don't know what you would normally use here in PHP while (odbc_fetch_row($result)) { $a = odbc_result($result, 1); if (is_null($prev_a) or $a != $prev_a) { $b = odbc_result($result, 2); $c = odbc_result($result, 3); print("A = $a, B = $b, C = $c\n"); $prev_a = $a; } }