2014-03-07 38 views
0

我有一個要求,需要查詢每個類型的前5個新聞並返回到前端,由JPA實現。postgreSQL分類限制

我現在已經兩種解決方案,

  1. 一是通過註釋來手動添加聯合SQL,
  2. 呼叫通過循環不同參數類型的服務。

其實我要的是就像SQL如下

select id, title, content 
from portal p 
where p.type = 'NEWS' 
order by create_date 
limit 5 

union 

select id,title,content, 
from portal p 
where p.type = 'MAG' 
order by create_date 
limit 5 

union... 

解決方案,需要對代碼JAVA許多SQL語句,而溶液B是不是有效,因爲類型超過10

有沒有其他的方式來查詢數據?通過註釋或PostgreSQL函數?我是JPA & Postgres的新手。

在此先感謝。

回答

0

您可以使用單個SQL語句執行此操作。我不確定你是否能夠避免表掃描。您可能需要包含更多列,具體取決於您是否需要按列排序。

select * 
from (select 
     id, title, content, 
     row_number() over (partition by type order by create_date asc) row_num 
     from portal 
    ) as numbered_rows 
where row_num <= 5; 

這種SQL語句的一個優點是它不需要維護。無論您添加多少種不同的類型,它都會繼續正常工作。

仔細想想你是否需要前五個(order by create_date ASC)或最近五個(order by create_date DESC)。

+0

是的......我忘了分區。謝謝 :) –