我知道我的问题是有点混乱,但如果我告诉你数据会更有意义,我试图来实现的。
我读了从只有一个表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
但它不工作
对于每一个启动键,您要查找的最大“分”值。 这可以通过嵌套子查询来完成。 然后,仅选择其中最小等于最大值(分钟)。 另外,如果你遇到这样的情况两条记录可以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
我不知道如果我理解正确你的问题,但是从我得到你想要得到一个特定的数据集。您可以通过只得到你所需要的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是一个日期字段。
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
是你想要的(尽管你可以添加额外的顺序选择一个特定的一个。
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