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
我需要返回唯一記錄的字段「富,酒吧,巴茲」一個SQL。 在這個例子中,三個四個記錄應返回:
me, my, at, bb, cc
qq, 33, er, tt, oo
22, jj, pp, ww, mm
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
我需要返回唯一記錄的字段「富,酒吧,巴茲」一個SQL。 在這個例子中,三個四個記錄應返回:
me, my, at, bb, cc
qq, 33, er, tt, oo
22, jj, pp, ww, mm
在沒有對GIF和XYZ的任何規則,這將採取各自的最低值
SELECT
foo, bar, baz, MIN(gif), MIN(xyz)
FROM
MyTable
GROUP BY
foo, bar, baz
不多,真的:
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
羞愧它不起作用。它會返回所有4行 – gbn 2011-03-14 19:58:06
您還沒有說過這是哪個版本的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
什麼讓你選擇bb和cc?如果你得到aa和cc,這有什麼關係?是否有另一列例如ID或日期時間優先? – gbn 2011-03-14 19:56:20
一般來說,對於SQL來說這是一個無效的任務,因爲你的第一行是含糊不清的,而你並沒有說如何確定要採用哪一行 - 以'bb,cc'或另一個以'aa,zz'結尾的行。在你的示例中,由於某種原因(順序?)選擇了'bb,cc',但是SQL在行中沒有'order',直到你指定'order by' – Snowbear 2011-03-14 19:58:22