sql - Postgres 使用另一行数据更新列

标签 sql database postgresql join

好的,我有两个表

measures
attr_id, period, net_orders, ref_1 (key = attr_id,period)

policy
attr_id, lead_time 

我需要做的是从周期(日期)的度量中获取“net_orders”,添加“lead_time”并更新度量表“ref_1”,其中 period = period+lead

我目前有 select 可以获取我需要的数据,但在尝试找出 where 子句时,我总是迷失在脑海中。

SELECT 
  m.attr_id, 
  m.period, 
  m.net_orders, 
  p.lead_time,
  DATE(m.period) + CAST(p.lead_time as INTEGER) as updateperiod
FROM 
  measures m 
  INNER JOIN policy p ON p.attr_id = m.attr_id

我遇到了以下一些查询 - 即不完整

UPDATE
  measures m
SET
  ref_1 = (SELECT m1.net_orders FROM measures m1 
           WHERE m1.attr_id = m.attr_id AND m1.period = m.period)
WHERE
  attr_id = (SELECT m3.attr_id 
             FROM measures m3 WHERE m3.attr_id = m.attr_id   
             AND m3.period = m.period)
  AND m.period = (SELECT DATE(m2.period) + CAST(p2.lead_time AS INTEGER) 
             FROM measures m2 INNER JOIN policy p2 ON p2.attr_id = m2.attr_id
             WHERE m2.attr_id = m.attr_id AND m2.period = m.period)

编辑

update measures m
set reference_1 = s.net_orders
from (
    select
        m.attribute_id, period, net_orders,
        DATE(period) + CAST(lead_time as integer) as periodlevel
    from
        measures m
        inner join policies p on p.attribute_id = m.attribute_id
) s
where
    m.attribute_id = s.attribute_id
    and m.period = s.periodlevel

这是最终有效的查询。我在第一个答案中遇到错误,但看起来它现在可以正常工作了!

最佳答案

update measures m
set ref_1 = s.net_orders
from (
    select
        m.attr_id, period, net_orders,
        period::date + lead_time::int period
    from
        measures m
        inner join
        policy using(attr_id)
) s
where
    s.attr_id = m.attr_id
    and s.period = m.period::date

关于sql - Postgres 使用另一行数据更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16465236/

相关文章:

python - 如何通过 Python 将存储在文本文件中的数据加载到 PostgreSQL 数据库中

sql - 帮助计算税收和折扣

iPhone 当应用程序升级到新版本时,以前的数据会发生什么

database - 如何使用nodejs pg-promise库将带有uuid数组的记录插入到pg表中

php - 查找数据库中与最多关键字匹配的记录

sql - PostgreSQL 查找周围的值

python - 如何在 python 中以 pgcrypto 兼容的方式加密

php - MYSQL查询优化

sql - 使用 Golang 中的数据库创建绑定(bind)结构

Entity Framework 生成的用于字符串匹配的 SQL