如何使用附加条件在 sqlite table 中获取 MAX() 字段?

How can I get MAX() field in a sqlite table using additional condition?

sqlite中有如下table结构:

==========================
| Id | Name | Date       |
==========================
| 1  | Foo  | 2021-01-01 |
--------------------------
| 2  | Foo  | 2021-01-02 |
--------------------------
| 3  | Foo  | 2021-01-03 |
--------------------------
| 4  | Bar  | 2021-01-01 |
--------------------------
| 5  | Bar  | 2021-01-02 |
==========================

并且我需要在一个查询中实现以下逻辑(伪代码):

$names = 'SELECT name FROM MyTable'

for ($name in $names) {
  $fields = 'SELECT * FROM MyTable WHERE name = :name'
  $id = getIdWithBiggestDate($fields)
}

因此,我应该得到这样的东西(具有唯一名称和最大日期的项目):

==========================
| Id | Name | Date       |
==========================
| 3  | Foo  | 2021-01-03 |
--------------------------
| 5  | Bar  | 2021-01-02 |
==========================

是否可以在一次查询中执行此操作?

select distinct Name,Date 
from MyTable
where 
(Name,Date) in (select Name,max(Date) from MyTable group by Name)

在 SQLite 中,您可以使用此非标准 SQL 查询:

SELECT Id, Name, MAX(Date) AS Date
FROM MyTable
GROUP BY Name

这在 SQLite 中有效,因为像 Id 这样的列没有出现在 group by 子句中,也没有聚合(bare 列)是从包含最大值 Date.

的行返回

参见demo