2016-11-10 40 views
3

舉一個例子,我想按類別,最大日化集團選擇ID,結果是:7,2,6如何在Phoenix的Ecto查詢中按類別選擇最大日期組的ID?

id category date 
1 a   2013-01-01 
2 b   2013-01-03 
3 c   2013-01-02 
4 a   2013-01-02 
5 b   2013-01-02 
6 c   2013-01-03 
7 a   2013-01-03 
8 b   2013-01-01 
9 c   2013-01-01 

這是我認爲SQL可以工作:

SELECT * FROM Table1 t1 
JOIN 
(
    SELECT category, MAX(date) AS MAXDATE 
    FROM Table1 
    GROUP BY category 
) t2 
ON T1.category = t2.category 
AND t1.date = t2.MAXDATE 

但如何將其轉換爲Ecto上的查詢?

+0

無關,而是:以'GROUP BY)與Postgres的使用'明顯的('或使用窗口功能的查詢會快很多,然後使用自聯接'。 –

回答

1

許多框架的問題是它們無法捕獲SQL SELECT語句的所有複雜性。最簡單的辦法:你的包裹複雜查詢的視圖:

CREATE VIEW my_complex_view AS 
    SELECT * FROM Table1 t1 
    JOIN (
    SELECT category, MAX(date) AS maxdate 
    FROM Table1 
    GROUP BY category) t2 
    ON t1.category = t2.category AND t1.date = t2.maxdate; 

現在你有一個簡單的查詢(SELECT * FROM my_complex_view)的任何像樣的框架可以輕鬆處理。

0

可以使用subquery功能

subquery = from t in "Table1" 
     |> select([t], %{categoty: t.category, max_date: max(t.date)}) 
     |> group_by([t], t.category) 

from t in "Table1" 
     |> join(:inner, [u], t in subquery(subquery), t.category == u.category and t.max_date == u.date) 
     |> Repo.all 
相關問題