为了确定表中每个类别的最大日期 id,PostgreSQL 提供了合适的方法。让我们考虑一下示例数据:
id | category | date |
---|---|---|
1 | a | 2013-01-01 |
2 | b | 2013-01-03 |
3 | c | 2013-01-02 |
4 | a | 2013-01-02 |
5 | b | 2013-01-02 |
6 | c | 2013-01-03 |
7 | a | 2013-01-03 |
8 | b | 2013-01-01 |
9 | c | 2013-01-01 |
为了达到预期的结果,我们可以利用 PostgreSQL 的 DISTINCT ON 子句。该子句允许我们根据指定的表达式选择唯一的行,并按另一列对结果进行分组。在本例中,我们将按类别对行进行分组,并选择每组中具有最大日期的不同 ID。
以下是完成此操作的查询:
SELECT DISTINCT ON (category) id -- , category, date -- any other column (expression) from the same row FROM tbl ORDER BY category, date DESC;
DISTINCT ON 子句确保仅选择每个不同类别值的第一次出现。 ORDER BY 子句首先按类别升序(字母顺序)对结果进行排序,然后按日期降序排序。此排序确保每个类别的最新日期的行首先出现。
执行此查询将产生以下结果:
id |
---|
7 |
2 |
6 |
这些 ID (7, 2, 6) 代表分别为类别 a、b 和 c 的最长日期。
以上是如何在 PostgreSQL 中查找每个类别的最大日期 ID?的详细内容。更多信息请关注PHP中文网其他相关文章!