[英]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.