如何在包含最大值的表中找到记录?
Posted
技术标签:
【中文标题】如何在包含最大值的表中找到记录?【英文标题】:How to find the record in a table that contains the maximum value? 【发布时间】:2010-09-27 10:50:50 【问题描述】:这个问题看似简单,其实有点棘手。
我有一个包含以下列的表格:
table A:
int ID
float value
datetime date
varchar(50) group
我想获取包含按“组”列分组的最大“日期”的记录的“ID”和“值”。 “每个组的最新值是多少?”
我可以得到每个组及其最大日期:
SELECT group, MAX(date) FROM A GROUP BY group; -- I also need the "ID" and "value"
但我想知道日期最高的记录的“ID”和值。
在 A 和结果之间进行 JOIN 可能是答案,但无法知道 MAX(date) 指的是哪条记录(以防“日期”重复)。
有人可以帮忙吗?
【问题讨论】:
【参考方案1】:您可以尝试使用子查询
从 A 中选择组、ID、值、日期,其中日期在 ( 选择 MAX(date) 作为日期 从一个 一组一组) 按组排序【讨论】:
【参考方案2】:这正是分析函数的用途:
select group,
id,
value
from (
select group,
id,
value,
date,
max(date) over (partition by group) max_date_by_group
from A
)
where date = max_date_by_group
【讨论】:
【参考方案3】:如果日期是唯一的,那么您已经有了答案。如果日期不是唯一的,那么您需要一些其他的唯一性。如果没有自然密钥,您的 ID 与任何密钥一样好。只需在上面加上一个 MAX(或 MIN,随你喜欢):
SELECT *
FROM A
JOIN (
--Dedupe any non unqiue dates by getting the max id for each group that has the max date
SELECT Group, MAX(Id) as Id
FROM A
JOIN (
--Get max date for each group
SELECT group, MAX(date) as Date
FROM A
GROUP BY group
) as MaxDate ON
A.Group = MaxDate.Group
AND A.Date = MaxDate.Date
GROUP BY Group
) as MaxId ON
A.Group = MaxId.Group
AND A.Id= MaxId.Id
【讨论】:
【参考方案4】:只要日期列对于每个组都是唯一的,我认为这样的方法可能有效:
SELECT A.ID, A.Value
FROM A
INNER JOIN (SELECT Group, MAX(Date) As MaxDate FROM A GROUP BY Group) B
ON A.Group = B.Group AND A.Date = B.MaxDate
【讨论】:
这使得为每个组找到一条最近的记录有点困难:]以上是关于如何在包含最大值的表中找到记录?的主要内容,如果未能解决你的问题,请参考以下文章
DB2 和 SQL-如何在特定字段中返回最大值,以便每行只显示一条记录;从多个表中提取数据