如何获得最大的基于日期字段,并得到其他领域也?(How to get maximum for a f

2019-10-17 15:08发布

我知道我的问题是有点混乱,但如果我告诉你数据会更有意义,我试图来实现的。

我读了从只有一个表T。

我读从表T 6场

StartKey
名称

LName的
MNAME
ID

顶级表是数据,以及底部表就是我想要的目的。 我需要为每个startkey获得最大的(分钟)
忘了,包括20130221输出。

以下是我试过到目前为止

select 
       startkey,
       name,
       min,
       lname,
       mname,
       id
from T
where startkey >= '20130118'
group by startkey,name,lname,mname,id
order by startkey

但它不工作

Answer 1:

对于每一个启动键,您要查找的最大“分”值。 这可以通过嵌套子查询来完成。 然后,仅选择其中最小等于最大值(分钟)。 另外,如果你遇到这样的情况两条记录可以startkey和最小的值相同,那么你将需要解决,否则,你都将选择它们。

select  startkey, name, min, lname, mname, id
from T T1
where min = 
 (select max(min) from T T2 where T1.startkey=T2.startkey)

order by startkey


Answer 2:

我不知道如果我理解正确你的问题,但是从我得到你想要得到一个特定的数据集。您可以通过只得到你所需要的StartKeys强制过滤器。 这应该工作:

SELECT StartKey, Name, Min, Lname, Mname, ID 
FROM T 
WHERE StartKey IN ('20130118','20130119','20130120')

如果还是不行,可以试试这个:

SELECT StartKey, Name, Min, Lname, Mname, ID
FROM T
WHERE Month(StartKey) >= 1

假设StartKey是一个日期字段。



Answer 3:

select startkey, name, min, lname, mname, id
  from (select startkey, name, min, lname, mname, id,
               row_number() over (partition by startkey order by min desc) rn
          from t)
 where rn = 1;

应该这样做。

例如: http://sqlfiddle.com/#!4/59f6a0/1

注意,如果您有2+行以相同的时间,你要回报他们所有,变更row_numberrank 。 如果你只想要其中的一个,然后row_number是你想要的(尽管你可以添加额外的顺序选择一个特定的一个。



Answer 4:

Select *
  From T 
      Inner Join (Select StartKey, Max(Min) AS MaxMinutes
                    From T
                   Group By StartKey
                  ) DerrivedView
    On T.Start = DerrivedView.StartKey And
       T.Min = DerrivedView.MaxMinutes


文章来源: How to get maximum for a field based on a date and get other fields also?