2015-02-10 92 views
0

最大日期假設我有以下表命名image_play,並具有以下行&的cols獲得基於列的值

+-------------------------------------------+ 
|image_name | image_category | image_date | 
+-------------------------------------------+ 
|a.jpg  | WSA    | 2015-02-10 | 
|b.jpg  | WSP    | 2015-02-09 | 
|c.jpg  | GSST   | 2015-02-09 | 
|d.jpg  | WSA    | 2015-02-09 | 
|e.jpg  | GSST   | 2015-02-08 | 
|f.jpg  | WSP    | 2015-02-08 | 
+-------------------------------------------+ 

從這個表我要選擇MAX日期爲每個image_category。這樣的結果將是

a.jpg  | WSA    | 2015-02-10 
b.jpg  | WSP    | 2015-02-09 
c.jpg  | GSST   | 2015-02-09 

我已經嘗試正在查詢每個類別,像這樣:

SELECT * FROM image_play t JOIN (SELECT MAX(image_date) AS MAXDATE FROM image_play WHERE image_category='GSST')t2 ON t.image_date=t2.MAXDATE 

但它不工作。請幫助我..感謝很多。

回答

0
select ipl.* 
from 
(select max(ip.image_date) max_date, ip.image_category from image_play ip 
group by ip.image_category) ipx 
join image_play ipl on ipl.image_category=ipx.image_category 
and ipl.image_date=ipx.max_date 
+0

太棒了!非常感謝,你救了我的一天 – 2015-02-10 05:52:15

1

Postgres的具體和最更快的解決方案是使用distinct on

select distinct on (image_category) image_name, image_category, image_date 
from image_play 
order by image_category, image_date DESC 

很多時候使用窗口功能也比使用一個派生表自聯接快(這是標準SQL,而不是Postgres特定的)。

select image_name, image_category, image_date 
from (
    select image_name, image_category, image_date, 
     row_number() over (partition by image_category order by image_date desc) as rn 
) t 
where rn = 1 
order by image_category