如何在Phoenix的Ecto查询中按类别选择具有最大日期组的ID?

Non*_*ona 5 postgresql ecto phoenix-framework

例如,我想按类别选择具有最大日期组的 id,结果是:7, 2, 6

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
Run Code Online (Sandbox Code Playgroud)

这是我认为可以工作的 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
Run Code Online (Sandbox Code Playgroud)

但是如何将其转换为对 Ecto 的查询?

Pat*_*ick 2

许多框架的一个问题是它们无法捕获 SQLSELECT语句的所有复杂性。最简单的解决方案:将复杂的查询包装在视图中:

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;
Run Code Online (Sandbox Code Playgroud)

现在你有了一个简单的查询(SELECT * FROM my_complex_view),任何像样的框架都可以轻松处理。