1

好的,我有两张桌子

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

我目前有一个选择,可以让我得到我需要的数据,但是当我试图找出 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

这是最终工作的查询。我在第一个答案时遇到错误,但看起来它现在正在工作!

4

1 回答 1

1
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
于 2013-05-09T16:20:27.063 回答