sql - 在其他列上查找具有最大值的列 按另一列分组
问题描述
我有一张这样的桌子:
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。这就是我试图通过这个查询找到的,这个项目的价格。Item
Date
ItemId = 1234
2022-01-01 00:00:00.000000
Id = 3
我是 SQL 的初学者并尝试了以下查询,但它给了我这个错误:
select "ItemId",
max("Date"),
"Price"
from "Products"
group by "ItemId"
[42803] 错误:列“Products.Price”必须出现在 GROUP BY 子句中或在聚合函数中使用
我很感激这里的任何帮助。谢谢!
解决方案
在 Postgres 中,您可以使用distinct on
:
select distinct on ("ItemId") p.*
from "Products" p
order by "ItemId", "Date" desc;
注意:如果您正在学习 SQL,请不要在字符串和列名中使用双引号。
推荐阅读
- javascript - KnockoutJS:参数化数据绑定
- spring-data - Spring Data 和 Mongo 的多租户
- python - 如何将 excel 文件名与 pandas DataFrame 合并?
- javascript - 在 React 中检查子复选框时防止触发父单击事件
- java - how to finish this java program about the collection
- javascript - 如何防止我的产品列表在父组件购物车状态更新时重新呈现?
- java - gradle 项目是否有等效的“mvn 依赖项:build-classpath”?
- jenkins - 使用 yarn install 时出错/无法回答问题,除非用户 TTY
- asp.net - 公共函数在设计时可访问但在运行时不可访问
- ios - 快速更改段开关上的段控制标题颜色