栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

标记不连续的日期范围

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

标记不连续的日期范围

generate_series()

PostgreSQL的

generate_series()
函数可以创建一个包含连续日期列表的视图:

with calendar as (    select ((select min(date) from test)::date + (n || ' days')::interval)::date cal_date    from generate_series(0, (select max(date) - min(date) from test)) n)select cal_datefrom calendar cleft join test t on t.date = c.cal_datewhere t.date is null;

该表达

select max(date) - min(date) from test
可能偏离一。

每月计数天数

识别无效月份的一种方法是创建两个视图。第一个计算每个站点每个月应产生的每日读数数量。(注意

climate.calendar
转换为
climate_calendar
。)秒数返回每个电台每月产生的实际每日读数。

每个站每月最多可使用的天数

该视图将返回每个站点一个月中的实际天数。(例如,二月将始终为28天或29天。)

create view count_max_station_calendar_days as with calendar as (    select ((select min(d) from climate_calendar)::date + (n || ' days')::interval)::date cal_date    from generate_series(0, (select max(d) - min(d) from climate_calendar)) n)select n, extract(year from cal_date) yr, extract(month from cal_date) mo, count(*) num_daysfrom stations cross join calendargroup by n, yr, moorder by n, yr, mo

每个站每月的实际天数

返回的总天数将少于计数。(例如,一月将始终少于31天。)

create view count_actual_station_calendar_days asselect n, extract(year from d) yr, extract(month from d) mo, count(*) num_daysfrom climate_calendargroup by n, yr, moorder by n, yr, mo;

ORDER BY
在生产中删除这些子句(它们对开发很有帮助)。

比较视图

将这两个视图结合在一起,以标识需要标记的站点和月份,进入一个新视图:

create view invalid_station_months as select m.n, m.yr, m.mo, m.num_days - a.num_days num_days_missingfrom count_max_station_calendar_days minner join count_actual_station_calendar_days a       on (m.n = a.n and m.yr = a.yr and m.mo = a.mo and m.num_days <> a.num_days)n   yr    mo  num_days_missing--A   1982  1   1E   2007  3   1

该列

num_days_missing
不是必需的,但很有用。

这些是需要更新的行:

select cc.* from climate_calendar ccinner join invalid_station_months im         on (cc.n = im.n and  extract(year from cc.d) = im.yr and extract(month from cc.d) = im.mo)where valid = true

更新数据库

要更新它们,

id
密钥很方便。

update climate_calendarset valid = falsewhere id in (    select id    from climate_calendar cc    inner join invalid_station_months im         on (cc.n = im.n and  extract(year from cc.d) = im.yr and extract(month from cc.d) = im.mo)    where valid = true);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634570.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号