Sql 如何在包含最大值的表中查找记录?
虽然这个问题看起来很简单,但有点棘手 我有一个包含以下列的表:Sql 如何在包含最大值的表中查找记录?,sql,datetime,select,group-by,max,Sql,Datetime,Select,Group By,Max,虽然这个问题看起来很简单,但有点棘手 我有一个包含以下列的表: table A: int ID float value datetime date varchar(50) group 我想获得包含按列组分组的最长日期的记录的ID和值。每个组的最新值是多少 我可以获得每个组及其最长日期: 按组从组中选择组,MAXdate;-我还需要ID和值 但我想知道最早日期的记录的ID和值 在a和结果之间进行连接可能是答案,但如果日期重复,则无法知道MAXdate引用的记录 有人能帮忙吗?您可
table A:
int ID
float value
datetime date
varchar(50) group
我想获得包含按列组分组的最长日期的记录的ID和值。每个组的最新值是多少
我可以获得每个组及其最长日期:
按组从组中选择组,MAXdate;-我还需要ID和值
但我想知道最早日期的记录的ID和值
在a和结果之间进行连接可能是答案,但如果日期重复,则无法知道MAXdate引用的记录
有人能帮忙吗?您可以尝试使用子查询 select group, id, value, date from A where date in ( select MAX(date) as date from A group by group ) order by group
只要Date列对于每个组都是唯一的,我认为这样做可能会奏效:
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
这正是分析函数的用途:
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
如果日期是唯一的,那么您已经有了答案。如果日期不是唯一的,那么您需要一些其他唯一的。如果没有一把自然钥匙,你的身份证和其他身份证一样好。只需输入最大值或最小值,以您喜欢的值为准:
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
这使得很难找到每个组的最新记录:]