1

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

2 回答 2

0

正如您在评论中所说:created_on=date_trunc('day', now()),所以该字段的数据类型created_ontimestamp。这是您可以执行的操作:

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
于 2013-04-05T11:12:26.890 回答
0

中的列DISTINCT ON()必须是ORDER BY查询中的第一个列,如果您想要最新的 created_on 日期,您应该订购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;

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

于 2013-04-05T11:18:12.290 回答