首页 > 解决方案 > 在其他列上查找具有最大值的列 按另一列分组

问题描述

我有一张这样的桌子:

Id   - ItemId -  Price   -  SalesId       -       Date
1       12      99.99924    21899234        2025-01-01 00:00:00.000000
2       123     12.34567    348923          2021-01-01 00:00:00.000000
3       1234    1234.5      3321234         2022-01-01 00:00:00.000000
4       12345   3.3246      2154234         2023-01-01 00:00:00.000000
5       1234    451.234     3423            2020-02-01 00:00:00.000000
6       12345   0.989       71112357        2020-09-15 20:20.10.000000
7       123     3435.3      71112357        2020-09-14 20:10:12.000000

我正在尝试找到最新Price的. 例如,如果我们尝试查找,日期最晚的是这个,它的价格是 1234.5。这就是我试图通过这个查询找到的,这个项目的价格。ItemDateItemId = 12342022-01-01 00:00:00.000000Id = 3

我是 SQL 的初学者并尝试了以下查询,但它给了我这个错误:

select "ItemId",
       max("Date"),
       "Price"
from "Products"
group by "ItemId"

[42803] 错误:列“Products.Price”必须出现在 GROUP BY 子句中或在聚合函数中使用

我很感激这里的任何帮助。谢谢!

标签: sqlpostgresql

解决方案


在 Postgres 中,您可以使用distinct on

select distinct on ("ItemId") p.*
from "Products" p
order by "ItemId", "Date" desc;

注意:如果您正在学习 SQL,请不要在字符串和列名中使用双引号。


推荐阅读