【问题标题】:Postgresql Date diffPostgresql 日期差异
【发布时间】:2021-10-26 18:14:05
【问题描述】:

我无法得到与上一次阅读的日期差异。请帮助为什么这不会运行

   alter table p.prodcution
   add Hourly_Rate double precision
   from p.production
   extract (epoch from (p.reported_date -
   (lag(p.reported_date) over (partition by well_id order by p.reported_date))
   ))/3600 AS Hourly_Rate
    ;

【问题讨论】:

  • 您不能在ALTER TABLE ... ADD COLUMN 的同时运行查询。此外,您实际上并没有使用ADD COLUMN,因此即使没有查询,该部分也无法工作。
  • 更改表 public.production 添加列 hourly_rate date extract(epoch(public.reported_date - (lag(public.reported_date) over (partition by public.well_id order by public.reported_date))))/3600 AS hourly_rate from public.production ;
  • 这更近了吗……我好迷茫
  • 不,您不能使用查询来填充 ALTER TABLE ... ADD COLUMN 中的字段。
  • 查看我的答案以获得可能的解决方案。

标签: postgresql date-arithmetic


【解决方案1】:

未经测试的程序。在线阅读 cmets。这假定有关主键的信息。

--Step 1. Add column to table
ALTER TABLE 
   p.production
ADD COLUMN 
   hourly_rate double precision;
--Step 2. Verify query. 
SELECT
   extract (epoch from (p.reported_date -
   (lag(p.reported_date) over (partition by well_id order by p.reported_date))
   ))/3600 AS Hourly_Rate
FROM 
  production
--Step 3. Update column
UPDATE 
   production
SET 
   (hourly_rate) = 
(SELECT
   extract (epoch from (p.reported_date -
   (lag(p.reported_date) over (partition by well_id order by p.reported_date))
   ))/3600 AS Hourly_Rate
FROM 
  production AS p
WHERE
    p.id = production.id)

您可能需要修改以使WHERE 子句正确。或者您可以将表的架构添加到您的问题中。

【讨论】:

  • 所以我走上了一条完全不同的道路。此代码现在运行,我只需将其更改为小时差。让我知道我是否偏离了基础,我是 PostgreSQL 的新手,并且已经陷入困境。非常感谢。
  • 从public.production中选择well_id,reported_date,lag (reported_date,1) over (partition by well_id order by well_id) AS hour_rate from public.production;
  • 将您的更改作为格式化代码添加到您的问题中。让人们通过 cmets 挖掘信息(尤其是更新的信息)会缩小您得到的响应。当您这样做时,请向您的问题添加一个示例,说明您希望返回什么信息以及返回什么以及您开始使用的数据示例。
  • 感谢您的反馈,这是我使用 Stack Overflow 的第一天。未来我会做得更好。再次感谢您
猜你喜欢
  • 2012-12-13
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多