示例表:
foo bar baz gif xyz
--- --- --- --- ---
me my at bb cc
me my at aa zz
qq 33 er tt oo
22 jj pp ww mm
我需要一个返回字段“foo,bar,baz”的唯一记录的SQL。 在此示例中,应返回四个记录中的三个:
me, my, at, bb, cc
qq, 33, er, tt, oo
22, jj, pp, ww, mm
答案 0 :(得分:2)
如果没有gif和xyz的任何规则,这将采用每个
的最低值SELECT
foo, bar, baz, MIN(gif), MIN(xyz)
FROM
MyTable
GROUP BY
foo, bar, baz
答案 1 :(得分:1)
你还没有说过这是哪个版本的SQL .....?
在sql server 2005或更高版本中,这是一个ROW_NUMBER()函数,可让您选择第一个行(按您提供的任何谓词排序)
查询看起来像
SELECT
[foo]
, [bar]
, [baz]
, [gif]
, [xyz]
FROM
(
SELECT
[foo]
, [bar]
, [baz]
, [gif]
, [xyz]
, ROW_NUMBER() OVER (
PARTITION BY [foo], [bar], [baz]
ORDER BY [gif] DESC, [xyz] DESC
)
AS [rnk]
FROM
<TheTable>
)
WHERE
[rnk] = 1
我相信Oracle中有类似的功能(它们被称为窗口功能)。我不知道mysql
答案 2 :(得分:0)
不多,真的:
select *
from myTable t1
join ( select distinct foo,bar,baz
from myTable
) t2 on t2.foo = t1.foo
and t2.bar = t1.bar
and t2.baz = t1.baz