Postgres:可以在表连接期间过滤的查询

时间:2013-04-05 11:00:36

标签: database postgresql

我有一个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

2 个答案:

答案 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

排序的最新created_on日期
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;

http://sqlfiddle.com/#!12/5538a/2

相关问题