1

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

我只从一张表 T 中读取所有内容。

我正在从该表 T 中读取 6 个字段。

StartKey
Name
Min
LName
MName
ID

上表是数据,下表是我想要实现的。我需要为每个 startkey 获取 max(minutes)
FORGOT TO INCLUDE20130221输出。

在此处输入图像描述

这是我到目前为止尝试过的

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

但它不起作用

4

4 回答 4

2

对于每个开始键,您都想找到最大“最小”值。这可以通过嵌套的子查询来完成。然后,仅选择最小值等于最大值(最小值)的位置。此外,如果您遇到两条记录可以具有相同的 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
于 2013-01-25T15:08:08.590 回答
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
于 2013-01-25T15:10:16.490 回答
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 字段。

于 2013-01-25T15:01:57.930 回答
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_numberrank. 如果您只想要其中一个,那么row_number这就是您想要的(尽管您可以添加额外的订购来选择特定的订购。

于 2013-01-25T15:04:35.523 回答