postgresql 按会计年度分组,时间从秒转换为dd,hh,mm,ss

chy5wohz  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(126)

我有一个表,其中包含列“财政年度(INT 8)"、“月份(文本)"和“时间(以秒为单位,INT)”示例:

Fiscal Year    Month         Time
  2009        April       446613459
  2009        August      1148046955
  2009       December     2093891109    ...

我想做两件事。
1.我想转换时间(以秒为单位),它显示呼叫者每个月在保留上花费的总秒数,以显示为“天、小时、分钟、秒”之类的内容
1.我还需要提供每个财政年度的持有“时间”总和,数据范围为2007-2022年。但是,我需要按财政年度将其分组,每年为10月1日至9月30日。
我是一个SQL新手,遇到了很多问题。目前我使用的是postgres。如果有任何帮助,我将不胜感激!谢谢!
预期结果示例2009会计年度将是2008年10月至2009年9月的项目总和。

Fiscal Year       Total Time
  2007           __days, __hours, __minutes, __seconds
  2008           __days, __hours, __minutes, __seconds
  2009           __days, __hours, __minutes, __seconds ...
s4n0splo

s4n0splo1#

假设fiscal_yearmonth中的值实际上是日历年和月(即2009年12月实际上是2009财年的第9个月),则需要进行两次计算:
1.将calendar year-month转换为fiscal year-month;
1.将time(持续时间以秒为单位?)转换为天、小时、分钟和秒
比如说:

fiscal_year|month    |calendar_month|fiscal_month|real_fiscal_year|time      |
-----------+---------+--------------+------------+----------------+----------+
       2008|September|    2008-09-01|  2008-06-01|          2008.0| 987654321|
       2008|October  |    2008-10-01|  2008-07-01|          2008.0| 123456789|
       2009|April    |    2009-04-01|  2009-01-01|          2009.0| 446613459|
       2009|August   |    2009-08-01|  2009-05-01|          2009.0|1148046955|
       2009|December |    2009-12-01|  2009-09-01|          2009.0|2093891109|
       2010|January  |    2010-01-01|  2009-10-01|          2009.0|1898989889|
       2010|March    |    2010-03-01|  2009-12-01|          2009.0| 300010001|
       2010|April    |    2010-04-01|  2010-01-01|          2010.0| 456785432|

然后执行以下查询:
第一次
编辑:根据将总时间放入单个列的请求,我们需要:
1.使用||运算符将文本/字符串连接在一起

  1. lpad()具有固定天数、小时数、分钟数和秒数
    1.使用::data_typecast将整数转换为字符
    下面是一个例子:
    第一个
    您可能注意到01 hours应该是01 hour。您可以执行01 hour(s)或使用case ... when ... else ...条件表达式。

相关问题