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

这使得很难找到每个组的最新记录:]