我的表中重复了一些值,我只想 Select 最新/最高日期的值,即:

ID   Type     Name      Value        Date
--  -------   -----    -------       -------------
1   "FRUIT"  "APPLE"  "Imported"  "2011-03-19 22:08:13"
5   "FRUIT"  "LEMON"  "Imported"  "2011-03-19 22:00:44"
22  "FRUIT"  "PEACH"  "Imported"  "2011-03-20 11:03:13"
31  "FRUIT"  "MELON"  "Imported"  "2011-04-28 18:42:07"
44  "FRUIT"  "PEACH"  "Imported"  "2011-04-12 11:06:11"
98  "FRUIT"  "CHERRY" "Imported"  "2011-03-19 22:46:04"
211 "FRUIT"  "MELON"  "Imported"  "2011-03-19 22:25:24"
217 "VEG"    "SPINACH""Imported"  "2011-03-19 22:25:24"

我想 Select 这些:

ID   Type     Name      Value        Date
--  -------   -----    -------       -------------
1   "FRUIT"  "APPLE"  "Imported"  "2011-03-19 22:08:13"
5   "FRUIT"  "LEMON"  "Imported"  "2011-03-19 22:00:44"
31  "FRUIT"  "MELON"  "Imported"  "2011-04-28 18:42:07"
44  "FRUIT"  "PEACH"  "Imported"  "2011-04-12 11:06:11"
98  "FRUIT"  "CHERRY" "Imported"  "2011-03-19 22:46:04"

这是我需要的简化版本,我的表有大约20列,所以我想要 Select *,如果没有,我可以逐个 Select .

所以我想 Select *行类型的水果,但只 Select 那些日期最高的.非常感谢.

推荐答案

这会给你你想要的:

SELECT *
FROM Table
INNER JOIN 
(SELECT Name, MAX(Date) as TopDate
FROM Table
WHERE Type = 'FRUIT'
GROUP BY Name) AS EachItem ON 
    EachItem.TopDate = Table.Date 
    AND EachItem.Name = Table.Name

基本上,它会找到每种水果的最新日期,然后显示每种水果的行信息(在日期和水果名称上连接).确保日期字段和名称字段都已编制索引.

如果您可以假设ID最高的项目也会是日期最高的项目(典型但不一定在所有情况下都是正确的——这取决于您的用例),那么您可以执行MAX(ID)而不是MAX(Date),并利用仅通过该ID链接而不是通过日期和名称链接的优势.

Postgresql相关问答推荐

使用RANGE窗口框架条款将SUM分析函数从PostgreSQL移至Redwitch

将几个左连接合并为一个

从子查询中的排序结果中获取前X行

如何将存储的、生成的列添加到非常大的表中?

ANTLR4 PostgreSQL语法被 destruct 了吗?

为什么我的应用程序接收的是空值而不是布尔值?

如何返回old_ids和重复行的映射';来自PostgreSQL函数的s new_id

有没有办法共享数据或监控复杂 PostgresQL 事务的进度?

postgres hierarchy - 用祖先的值填充缺失值

如何在 kubernetes 中安全地重启 postgresql 容器?

使用 Heroku CLI、Postgres 的 SQL 语法错误

在 PostgreSQL 中返回插入的行

PostgreSQL 中的 DATEADD 等效项

从左连接更新 Postgres

并发刷新materialized视图

如何使用 psql 执行 *.sql 文件

当成功有时会导致退出代码为 1 时,如何可靠地确定 pg_restore 是否成功?

pg_restore 会覆盖现有的表吗?

在子类的 Hibernate 中 for each 表指定不同的序列

提高查询速度:simple SELECT in big postgres table