我知道我的问题有点令人困惑,但如果我向您展示数据,那将更有意义我想要实现的目标。
我正在从一张桌子T上阅读所有内容。
我正在阅读那张桌子上的6个字段。
StartKey
名称
闵
LName的
MNAME
ID
Top Table是数据,底层表是我想要实现的。
我需要为每个startkey获取最大值(分钟)
请输出中包含20130221
。
这是我到目前为止所尝试的内容
select
startkey,
name,
min,
lname,
mname,
id
from T
where startkey >= '20130118'
group by startkey,name,lname,mname,id
order by startkey
但它不起作用
答案 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