如何根据日期获得字段的最大值并获得其他字段?

时间:2013-01-25 14:58:50

标签: sql oracle oracle10g oracle11g

我知道我的问题有点令人困惑,但如果我向您展示数据,那将更有意义我想要实现的目标。

我正在从一张桌子T上阅读所有内容。

我正在阅读那张桌子上的6个字段。

StartKey
名称

LName的
MNAME
ID

Top Table是数据,底层表是我想要实现的。 我需要为每个startkey获取最大值(分钟)
请输出中包含20130221

enter image description here

这是我到目前为止所尝试的内容

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

但它不起作用

4 个答案:

答案 0 :(得分:2)

对于每个开始键,您需要找到Max“min”值。这可以通过嵌套的子查询来完成。然后,仅选择min等于max(min)的位置。 此外,如果您有两个记录可以具有相同的startkey和min值的情况,那么您需要解决这个问题,否则您将同时选择它们。

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

答案 1 :(得分:0)

我不知道我是否正确理解了你的问题,但是从我得到的你想要获得一组特定的数据..你可以通过只获得你需要的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是Date字段。

答案 2 :(得分:0)

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_number更改为rank。如果您只想要其中一个,那么row_number就是您想要的(尽管您可以添加额外的订单以选择特定的一个。

答案 3 :(得分:0)

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