Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何根据日期获取字段的最大值,同时获取其他字段?_Sql_Oracle_Oracle10g_Oracle11g - Fatal编程技术网

Sql 如何根据日期获取字段的最大值,同时获取其他字段?

Sql 如何根据日期获取字段的最大值,同时获取其他字段?,sql,oracle,oracle10g,oracle11g,Sql,Oracle,Oracle10g,Oracle11g,我知道我的问题有点让人困惑,但如果我向你们展示数据,这将更有意义我正在努力实现的目标 我只从一张桌子上看所有的东西 我正在从表T中读取6个字段 开始键 名称 最小值 LName MName ID 上表是数据,下表是我想要实现的。 我需要为每个startkey获取最大值(分钟) 忘记在输出中包含20130221 这是我到目前为止试过的 select startkey, name, min, lname, mname,

我知道我的问题有点让人困惑,但如果我向你们展示数据,这将更有意义我正在努力实现的目标

我只从一张桌子上看所有的东西

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

开始键
名称
最小值
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

但是它不起作用

我不知道我是否正确理解了你的问题,但从我得到的信息来看,你试图得到一组特定的数据。。您可以通过只获取所需的开始密钥来强制筛选。这应该起作用:

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;
我应该这样做

例如:


请注意,如果同时有两行以上的行,并且希望全部返回,请将
行数
更改为
。如果您只需要其中一个,则
行数
就是您想要的(尽管您可以添加额外的顺序来选择一个特定的。

对于每个开始键,您需要找到最大“最小”值。这可以通过嵌套子查询完成。然后,仅选择最小值等于最大(最小)的位置。 此外,如果两条记录的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

如果有多个条目的最大值为分钟,您希望发生什么?例如,如果20130118上有另一个条目的
Min
值为299,该怎么办?@Ciarán,我还没有遇到过,请忽略仅用于测试目的的where子句。您好,对不起,我不应该包含startkey的where子句,它只是f或测试目的。感谢很多简单的解决方案。我想知道您是否可以帮我解决这一点,我发现了一个小问题,其中是另一个条件,只有在flag=0时才能获得最大值,对于startkey
20130119
最大值是
300
,但对于此行,另一个名为flag的字段设置为
1
,如何n我告诉它只在
flag=0
的地方获取最大值,如果我在where子句条件中输入
flag=0
,它将完全忽略并跳过
20130119
,这意味着该startkey没有显示结果。您是否将flag=0放入内部嵌套子查询中?如果是,该子查询将返回日期20的最大值100130119再次工作非常感谢。在
T2.startkey和flag=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