繁体   English   中英

如何从同一个月获取最大日期行?

[英]How to fetch row of max of date from a same month?

我有一个名为XX_DATE的表,其中包含columns ID, start_date, end_date, start_reading, end_reading

实际数据

实际日期的最后 2 行应使用同一月的max end_date和同一月的max end_reading作为单行获取。

预期结果

这并不像看起来那么简单。 但让我先从一个简单的答案开始。

为了实现您的目标,请按end_date的实际年/月创建一个查询和分组,然后获取min(startdate)max(end_date)并对阅读列应用相同的规则。

select min(start_date)    as start_date
,      max(end_date)      as end_date
,      min(start_reading) as start_reading
,      min(end_reading)   as end_reading
from   XX_DATE
group by trunc( end_date, 'MM')

一个问题是查询不会考虑周期中的间隙,这意味着如果数据周期中存在间隙,它仍然会显示为一条记录,并且不会指示存在间隙。 如果这没问题,你就没事,否则这将行不通。

另一个问题是这样做,您会丢失 id 列,您将不得不考虑创建一个新序列作为 id 列或创建一个聚合的 id 列,如6:7 ,以便您始终可以参考原始 id。

ID 作为最低 id 值

select min(id)            as id
,      min(start_date)    as start_date
,      max(end_date)      as end_date
,      min(start_reading) as start_reading
,      min(end_reading)   as end_reading
from   XX_DATE
group by trunc( end_date, 'MM')

ID 作为新生成的 id

select rownum as id,
       start_date,
       end_date,
       start_reading,
       end_reading
from (
  select min(start_date)    as start_date
  ,      max(end_date)      as end_date
  ,      min(start_reading) as start_reading
  ,      min(end_reading)   as end_reading
  from   XX_DATE
  group by trunc( end_date, 'MM')
) 

ID 作为聚合的 id 列

select listagg(id, ':') WITHIN GROUP (order by id) as id_agg
,      min(start_date)    as start_date
,      max(end_date)      as end_date
,      min(start_reading) as start_reading
,      min(end_reading)   as end_reading
from   XX_DATE
group by trunc( end_date, 'MM')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM