2011-02-10 63 views
2

在我的桌子問題我已經在其他兩個領域:article_idversionSQL中,排序依據/的GroupBy

例子:

article_id | version 
    -----------|---------- 
     5  | 1 
     5  | 2 
     6  | 1 

我想要做的是檢索每個最新版本文章ID。 (在我的例子中,我想檢索第5版本2對象和第6條和第1版對象)。

問題是,mysql正在做group by而不是order by,所以它返回給我的每篇文章的第一版,但我想相反。

你有想法嗎?

解決方案

select * 
from article r 
where r.version=(
select max(version) 
from article r2 
where r2.article_id = r.article_id 
); 
+0

SELECT * FROM ressources ORDER BY版本DESC GROUP BY的article_id – 2011-02-10 15:13:38

回答

5

你的問題有點含糊,但我相信這是或多或少這就是你想要什麼:

 
select * from (
    select 
     <table>.*, 
     row_number() over (partition by article_id order by version desc) r 
    from 
     <table> 
) 
where r = 1 

該查詢返回每個(不同的)article_id的一個記錄。此記錄是返回article_id的最高版本的記錄。

因此,加上一個 「測試案例」,這可以在行動中看到:

create table tq84_resorces (
    id   number primary key, 
    article_id number not null, 
    version  number not null 
); 

insert into tq84_resorces values (50, 5, 1); 
insert into tq84_resorces values (60, 5, 2); 
insert into tq84_resorces values (70, 6, 1); 


select * from (
    select 
     tq84_resorces.*, 
     row_number() over (partition by article_id order by version desc) r 
    from 
     tq84_resorces 
) 
where r = 1 

返回:

 ID ARTICLE_ID VERSION   R 
---------- ---------- ---------- ---------- 
     60   5   2   1 
     70   6   1   1 
2
select yt.id, yt.article_id, yt.version 
    from (select article_id, max(version) as max_version 
       from YourTable 
       group by article_id) t 
     inner join YourTable yt 
      on t.article_id = yt.article_id 
       and t.max_version = yt.version 
+0

它返回我錯誤的ID,但正確的article_id和版本 – 2011-02-10 15:20:20

+0

@Tristan:編輯我的答案。 – 2011-02-10 15:44:24

+0

謝謝,它工作得更好:-) – 2011-02-10 15:48:07

2
select 
    article_id, 
    max(version) as Version 

from article 

group by article_id 
+0

它返回我錯誤的ID,但正確的article_id和版本 – 2011-02-10 15:19:42

1

首先,你應該改變版本列到整數(也許有,如果你強烈需要字符串的前綴列),比你能

Select MAX(version) 
... 
Group By article_id 
1

請問這項工作:

select articleId, (select top 1 version 
        from article ar2 
        where ar2.articleId = ar.articleId 
        order by version desc) as version 
from article ar 
group by ar.articlId 

在sql server 2005中工作,沒有在mysql中測試。