Sql Oracle 11g-从小时列大于的集合中排除记录
考虑以下最小的示例:Sql Oracle 11g-从小时列大于的集合中排除记录,sql,oracle11g,Sql,Oracle11g,考虑以下最小的示例: SQL> select key1, key2, key3, hour from teste_jm; KEY1 KEY2 KEY3 HOUR ---------- ---------- ---------- ----- 26 992296089 1504 12:30 26 992296089 1275 13:30 我想排除KEY3为1275的记录,因为它的小时数大于KEY
SQL> select key1, key2, key3, hour from teste_jm;
KEY1 KEY2 KEY3 HOUR
---------- ---------- ---------- -----
26 992296089 1504 12:30
26 992296089 1275 13:30
我想排除KEY3为1275的记录,因为它的小时数大于KEY3为1504的记录的小时数
我尝试了以下方法,但没有成功(我希望KEY4是1504):
因此,基本上,在Oracle 11g中,我想做的是只为同一个KEY1、KEY2对保存时间最早的记录
我该怎么做
编辑:下面是一个更完整的示例:
SQL> select * from teste_jm;
KEY1 KEY2 KEY3 HOUR
---------- ---------- ---------- -----
27 993334444 1 23:00
27 993334444 2 23:59
26 992296089 1504 12:30
26 992296089 1275 13:30
上述各项的预期输出:
KEY1 KEY2 KEY3 HOUR
---------- ---------- ---------- -----
27 993334444 1 23:00
26 992296089 1504 12:30
SQLFIDLE包含示例数据。尝试执行此操作
select key1, key2, key3, hour from teste_jm where hour = (select min(hour) from teste_jm);
嗯,编辑完后,试试这个
select key1, key2, key3, min(hour) OVER (PARTITION BY key1,key2) from teste_jm;
试着这样做
select key1, key2, key3, hour from teste_jm where hour = (select min(hour) from teste_jm);
嗯,编辑完后,试试这个
select key1, key2, key3, min(hour) OVER (PARTITION BY key1,key2) from teste_jm;
你为什么不分组并获取最小值,我希望上面的输入与o/p示例是正确的,以便与下面的查询同步
Select KEY1, KEY2 ,min(KEY3), HOUR
from table group by
KEY1, KEY2
having HOUR=min(HOUR)
你为什么不分组并获取最小值,我希望上面的输入与o/p示例是正确的,以便与下面的查询同步
Select KEY1, KEY2 ,min(KEY3), HOUR
from table group by
KEY1, KEY2
having HOUR=min(HOUR)
您很接近,但需要一个子查询进行筛选,并为最小值提供正确的逻辑:
select key1, key2, key3, hour
from (select key1, key2, key3, hour,
min(to_date(hour, 'HH24:MI')) over (partition by key1) as min_hour
from teste_jm
) t
where hour = min_hour;
您很接近,但需要一个子查询进行筛选,并为最小值提供正确的逻辑:
select key1, key2, key3, hour
from (select key1, key2, key3, hour,
min(to_date(hour, 'HH24:MI')) over (partition by key1) as min_hour
from teste_jm
) t
where hour = min_hour;
很抱歉,这不会产生我想要的输出;请参阅上面的“更完整的示例”,我希望返回2条记录。我很抱歉没有早点说清楚。嗯,你的第二个答案是。。。有点接近?我实际上想选择某种MIN(键3)而不是MIN(小时)。。。除了为了确定最小值是多少,我希望使用HOUR列。希望这是有意义的。你只需要在have子句中有一个条件,因为minhour的键检查我的答案对不起,但这并不能产生我想要的输出;请参阅上面的“更完整的示例”,我希望返回2条记录。我很抱歉没有早点说清楚。嗯,你的第二个答案是。。。有点接近?我实际上想选择某种MIN(键3)而不是MIN(小时)。。。除了为了确定最小值是多少,我希望使用HOUR列。希望这是有意义的。你只需要在子句中有一个条件,因为那些最短时间的键检查我的答案,结果。。。ORA-00979:不是通过表达式分组检查现在应该可以了。我刚才看到有多个键3,就是这样,它在工作,直到不工作。不是一个由表达式组成的组。我在我的原始帖子中添加了一个SQLFiddle链接,这样你就可以查看了。。。ORA-00979:不是通过表达式分组检查现在应该可以了。我刚才看到有多个键3,就是这样,它在工作,直到不工作。不是一个由表达式组成的组。我在我原来的帖子中添加了一个SQLFiddle链接,这样你就可以查看了。看起来不错,谢谢。只是一个小小的更正:“hour”是HH24:MI格式的VARCHAR2(5)列;因此,子查询应该分别包含
to_date(hour,'HH24:MI')
和min(to_date(hour,'HH24:MI'))
,而不是hour
和min(hour)
。除此之外,你的答案似乎还可以。似乎有效,谢谢。只是一个小小的更正:“hour”是HH24:MI格式的VARCHAR2(5)列;因此,子查询应该分别包含to_date(hour,'HH24:MI')
和min(to_date(hour,'HH24:MI'))
,而不是hour
和min(hour)
。除此之外,你的答案似乎还可以。