我有一个postgres数据库,其中一个表上有重复的条目。我想展示created_by列
表1
id | number
1 | 123
2 | 124
3 | 125
4 | 126
表2
id | number | created_on
1 | 123 | 3/29
2 | 123 | 4/3
3 | 124 | 3/31
4 | 124 | 4/1
表2上的数字是重复的。我想形成一个查询列出以下内容:
id | number | created_on
1 | 123 | 4/3
2 | 124 | 4/1
对于重复的条目,仅包含最新条目。我怎么能形成那个SQL查询?
SELECT DISTINCT ON (Table1.number) Table1.id, Table2.number, Table2.create_on FROM Table1
JOIN Table2 ON Table1.number=Table2.number
ORDER BY Table2.create_on;
实际上我尝试在单个查询中使用'DISTINCT ON'和'ORDER BY'(使用JOIN)它会给我以下错误:
SELECT DISTINCT ON expressions must match initial ORDER BY expressions
答案 0 :(得分:0)
正如您在评论中所说:created_on=date_trunc('day', now())
,因此字段created_on
的数据类型为timestamp
。您可以这样做:
SELECT table_1.id, table_1.number, max(created_on) as created_on
FROM table_1
inner join table_2 using(number)
group by table_1.id, table_1.number
答案 1 :(得分:0)
DISTINCT ON()
中的列必须是ORDER BY
查询中的第一列,如果您想要按created_on DESC
SELECT DISTINCT ON (Table1.number) Table1.id, Table2.number, Table2.created_on
FROM Table1
JOIN Table2
ON Table1.number=Table2.number
ORDER BY Table1.number,Table2.created_on DESC;