2015-02-08 37 views
1

我使用json_agg Postgres裏這樣Postgres的json_agg限制

json_agg((e."name",e."someOtherColum",e."createdAt") order by e."createdAt" DESC) 

但我想限制多少行將會被聚合到JSON。我想寫這樣的東西

json_agg((e."name",e."someOtherColum",e."createdAt") order by e."createdAt" DESC LIMIT 3) 

是否有可能以某種方式?

這是完整的查詢

SELECT e."departmentId", 
json_agg((e."name",e."someOtherColum",e."createdAt") order by e."createdAt" DESC) as "employeeJSON" 
FROM "Employee" e 
GROUP BY e."departmentId" 

所以我想實現與前三個員工爲每個部門的部門。

回答

2

你需要一個子選擇返回每DepartmentID的只有三行,然後聚集的這個結果:

select "departmentId", 
     json_agg(("name","someOtherColum","createdAt") order by "createdAt" DESC) as "employeeJSON" 
FROM (
    SELECT "departmentId", 
     "name" 
     "someOtherColum", 
     "createdAt", 
     row_number() over (partition by "departmentId" order by "createdAt") as rn 
    FROM "Employee" 
) t 
WHERE rn <= 3 
GROUP BY "departmentId" 

注意,使用帶引號的標識符通常不是個好主意。從長遠來看,比他們值得的更麻煩。