从间隔分割值并按 isoweek 分组 - Postgresql

2024-04-18

我想根据日期间隔将单个任务的时间“分配”或“拆分”为等周。但我不知道如何在 Postgresql 中做到这一点。

CREATE TABLE task
    (id int4, start date, stop date, hr int4);    
INSERT INTO task
    (id, start, stop, hr)
VALUES
    (1, '2017-01-01','2017-01-31', 80),
    (2, '2017-01-01','2017-02-28', 120);

这两个任务的期望输出应该是这样的:

The 80 hr of task 1 should be distributed into 5 weeks 

201701 16 hr
201702 16 hr
201703 16 hr
201704 16 hr
201705 16 hr

The 120 hr of task 2 should be distributed into 9 weeks 

201701 13,3 hr
201702 13,3 hr
201703 13,3 hr
201704 13,3 hr
201705 13,3 hr
201706 13,3 hr
201707 13,3 hr
201708 13,3 hr
201709 13,6 hr

此估计是粗略估计,可能与实际情况有所不同。

我可以想到三个步骤(但不知道如何进行):

  1. 估计每个任务的周数
  2. 将小时数除以周数
  3. 按 iso 周对结果进行分组

SELECT id,
       yr * 100 + w AS week,
       hr::double precision / (stop_week - start_week + 1) AS hrs_per_week
FROM (
    SELECT id,
           extract(year from start)::integer AS yr,
           extract(week from start)::integer AS start_week,
           extract(week from stop)::integer AS stop_week,
           hr
    FROM task) sub,
    generate_series(start_week, stop_week) weeks(w)
ORDER BY 1, 2;

In the sub查询从每一行收集到的一些基本数据,generate_series()set-returning 函数将其转换为一组行,每周一行。然后主查询计算每周每个任务的小时数。

请注意,这并不适用于多年。如果您需要,那么您必须扩展sub查询以获取开始年和结束年并计算跨年的周数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从间隔分割值并按 isoweek 分组 - Postgresql 的相关文章

随机推荐

  • Laravel 迁移更改列的默认值

    我有一个已分配默认值的表 例如 我们可以看看以下内容 Schema create users function Blueprint table table gt increments id gt unsigned table gt inte
  • 子元素悬停时的 CSS 过渡

    当子元素的父元素悬停在其上方时 我试图暂停子元素的显示 Html span div This Is The Child div Some Text in the span span Css span position relative sp
  • 如何在 php 脚本仍在运行时显示结果

    所以我尝试过在脚本仍在执行时显示结果 https stackoverflow com questions 5415665 show results while script is still executing 但由于某种原因它不起作用 所
  • Jshell错误:java.lang.NullPointerException:charsetName

    我正在尝试使用 JDK11 提供的 JShell 来运行一些简单的命令 但是当我输入 jshell gt System out println Hello World 它给了我错误 Exception in thread main java
  • 抽象类中可以有静态数据成员吗?

    我设计了一系列相关的类 为了能够管理它们 我让它们从一个抽象类派生 这些类都需要访问一系列共享资源 我发现自己在每个类中创建了一个指针向量 它们全部相同 它们必然必须相同 似乎在基类中创建一个静态成员将使所有派生类都可以访问该向量 这意味着
  • 如何向我的应用程序添加“撰写评论”/“给我们评分”功能?

    我希望在我的应用程序中添加某种 撰写评论 或 给我们评分 功能 以便我的客户可以轻松地对我的应用程序进行评分和评论 我能想到的最佳实践是在我的应用程序中进行某种弹出窗口或打开 UIWebView 这样用户在打开 App Store 应用程序
  • Whatsapp 预览链接上未显示缩略图和说明

    我知道也有类似的问题here https stackoverflow com questions 19778620 provide an image for whatsapp link sharing and here https stac
  • TFS分行拒绝前往

    我们使用的是 TFS 2010 使用的客户端是 VS 2008 VS 2010 和 VS 2012 我使用 VS 2010 功能来查看 TFS 层次结构功能 以可视化我的 TFS 分支设置并对其进行维护 问题是 一旦分支上的工作完成 我右键
  • 将现有属性添加到所有属性集

    我有一个existing嵌入代码的属性 我需要将此属性与 120 多个现有属性集相关联 如果我知道属性集 ID 如何以编程方式将该属性添加到所有属性集 我发现为这个问题编写代码很有趣 所以这里是有效的解决方案 在 php 脚本 包括 mag
  • UML 设计类图:具有另一个类作为属性的类?

    我很难弄清楚如何将特定场景建模为 UML 设计类图 假设我有以下情况 我有一个名为 CPoint 的类 它有两个属性 x 和 y R2 平面中的坐标 另外 我有一个名为 CLine 的类 它应该有两个 CPoint 作为属性 这对代码来说非
  • 我的 apt 安装 boost 时搞砸了

    在Ubuntu上 gt sudo apt get install libboost all dev Reading package lists Done Building dependency tree Reading state info
  • Twisted:与 TCP 服务器的客户端连接数量有限?

    我正在编写一个聊天服务器 并在对其进行单元测试时遇到以下问题 在我的一个单元测试中 我将许多测试客户端连接到我的服务器 当连接的用户数达到 511 时 服务器停止响应 且没有任何错误消息 在此阶段 一切都在 PC 上本地运行 我准备了一个简
  • org.openqa.selenium.remote.ProtocolHandshake createSession 信息:尝试使用 Selenium Grid 进行双方言会话

    我建立了一个本地硒网格来测试一些东西 连接到另一个网格时构建运行正常 但使用本地网格时构建仅在此时停止 T E S T S Running xxx xxxxxxxxxxxx xxx xxxxxxxxxxx XXXXXXXXXXXX Sep
  • C语言中从数组中删除元素

    我只是有一个关于 C 中数组的简单问题 从数组中删除元素并在此过程中使数组变小的最佳方法是什么 即 数组是nsize 然后我从数组中取出元素 然后数组会根据我从中删除的元素而变小 基本上 我将数组视为一副纸牌 一旦我从这副纸牌的顶部取出一张
  • 如何使用 mysql 的正则表达式匹配偶数个字母或奇数个字母

    有谁知道如何在mysql中使用正则表达式匹配偶数和奇数字母 我需要匹配偶数个 A 后跟奇数个 G 然后至少一个 TC 例如 acgtccAAAAGGGTCatg 将匹配 这是 DNA 测序的东西 偶数个 A 可以表示为 AA 一个或多个实例
  • C++11:是否有一些原因导致某些常规类型不应该专门化`std::hash`?

    对于常规类型 我的意思是 Stepanov 的定义编程要素基本上 存在相等的概念 并且作为彼此副本的对象比较相等 所以当你有常规类型时T 并且等式关系是传递的 a b b c gt a c 你可以定义一个 不平凡的 符合等式定义的哈希函数
  • Rails 3/ActiveRecord:如何在请求期间动态切换/更改表名称?

    我想在请求期间动态更改 ActiveRecord 模型类的表名称 例如 有许多具有相似结构 列 的表 mydb sample data 12222 sample data 12223 sample data 12224 sample dat
  • Helm + Kubernetes,加载并启用 PHP 中的扩展或模块

    当我使用 kubernetes 运行 php 部署时遇到问题 因为不加载模块或扩展库 我的部署文件是这样的 apiVersion apps v1 kind Deployment metadata name php labels app ph
  • 使用 Sgen 和 ILMerge 预生成 XmlSerializer。数组的问题

    我广泛使用 XmlSerializer 而不是允许 NET 在运行时生成必要的序列化程序集 我希望提前生成这些程序集并将它们与我的应用程序捆绑在一起 我能够使用 Sgen 在构建时生成这些程序集 此外 我必须为要序列化的每个数组类型单独运行
  • 从间隔分割值并按 isoweek 分组 - Postgresql

    我想根据日期间隔将单个任务的时间 分配 或 拆分 为等周 但我不知道如何在 Postgresql 中做到这一点 CREATE TABLE task id int4 start date stop date hr int4 INSERT IN