从SQL结果中删除具有较低日期的副本

时间:2015-11-01 20:23:50

标签: postgresql

我有以下表格:

CREATE TABLE Kundendaten (
beschreiben_knr INTEGER REFERENCES Kunde(knr) DEFERRABLE INITIALLY DEFERRED,
erstelldatum DATE,
anschrift VARCHAR(40),
sonderrabat INTEGER,
PRIMARY KEY (erstelldatum, beschreiben_knr)
);

如果我提出此查询:

select * from Kundendaten ORDER BY erstelldatum DESC;

我得到:

 beschreiben_knr | erstelldatum |   anschrift   | sonderrabat 
-----------------+--------------+---------------+-------------
               1 | 2015-11-01   | Winkelgasse 5 |           0
               2 | 2015-11-01   | Badeteich 7   |          10
               3 | 2015-11-01   | Senfgasse 7   |          15
               1 | 2015-10-30   | Sonnenweg 3   |           5

但如果有多个条目,我只需要获得最高日期条目的条目。在这种情况下,最后一行不应出现。

我如何在postgresql中实现这一目标?

1 个答案:

答案 0 :(得分:1)

你想要像WHERE erstelldatum = MAX(DATE)这样的东西,但这不起作用。您可以使用子查询来获取最新日期。

SELECT *
FROM Kundendaten
WHERE erstelldatum = (
  SELECT MAX(erstelldatum) FROM Kundendaten
);

(SQL Fiddle)

Postgres将优化该子查询,因此它只运行一次,但您需要确保erstelldatum被编入索引。