【问题标题】:selecting by date - oracle按日期选择 - oracle
【发布时间】:2016-11-21 09:33:57
【问题描述】:

我从几个表中做了一个复杂的查询,通过它们的 id 返回给我一个实体列表。
查询构建如下:
"with t as (--the complex query --) select * from t"

喜欢(没关系):

12001
12004
15003

我还有一个包含 3 列的表格:

  1. 序列(进一步使用我作为身份)
  2. 实体(从上方)
  3. value_date(格式:dd/mm/yyyy)

所有实体的起息日并不相同。

例如,表格如下所示:

seq           entity        value_date 
----------    ----------    ----------  
1580          12001         30/06/2016 
1579          12004         31/05/2016 
1578          15003         30/06/2016 
1577          12001         31/05/2016 
1576          12004         30/06/2016
1575          15003         31/05/2016 
1574          12004         30/04/2016 
1573          67677         30/04/2016 

我需要为每个实体运行(从查询中,因为该表也包含与我无关的实体),并为实体选择具有最大值 value_date 的序列。

结果需要列出 3 列:seq、entity、value_date(每个实体的最大值)

我该怎么做?

我希望我的问题很清楚。

【问题讨论】:

  • 感谢编辑,Sujeet Sinha! :-) 这很有帮助!

标签: sql oracle date select


【解决方案1】:

您似乎需要选择 max(value_date)

对于每个实体

select seq,  entity, value_date 
from my_table 
where (entity, value_date) in  (select entity , max(value_date) 
                               from my_table  
                               group by entity);

如果有用也试试这个方法

select a.seq,  a.entity, a.value_date 
from my_table a
inner join my_table b on a.entity = b.entity 
group by b.entity
having  a.value_date = max(b.value_date)

【讨论】:

  • 第一个解决方案对我不起作用,因为每个实体都有不同的 value_date (有可能。在示例中我输入了相同的日期)。
    我不明白第二种解决方案……它是针对一个实体的?我需要一个查询,并获取包含:seq、entity、value_date 的列表。我希望现在更清楚了:-)
  • 第二个是针对所有实体.....查询选择实体和日期与实体和maxdate匹配的所有行..这应该是您所问的..否则。 . 解释得更好.,.. 如果你愿意,你可以只选择 seq ..
  • 好的。我会试试看。也许是因为我从来没有这样写过,乍一看我并不清楚
  • 它工作得很好......购买我发布了我在我的 qes 中没有说的新问题......所以我需要编辑它。因为我遇到了一些麻烦。
  • In SO .. 更改问题是不公平的 .. 如果我的问题是正确的,您应该将答案评为已接受,然后发布一个新问题 ..
猜你喜欢
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 2015-07-16
  • 2012-05-25
相关资源
最近更新 更多