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 的查询?
许多框架的一个问题是它们无法捕获 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),任何像样的框架都可以轻松处理。
| 归档时间: |
|
| 查看次数: |
1873 次 |
| 最近记录: |