postgresql更新最新的行

时间:2015-02-19 14:46:37

标签: sql postgresql

我在更新查询时遇到了一些问题。我的任务是更改数据示例的新闻行中的状态:

id     product_id  import_id     modified_at           status
30470     30470        5     "2014-12-08 14:46:22"     "NEW"
96091     30470        7     "2014-12-18 06:11:10"     "CURRENT"
161203    30470        9     "2014-12-29 12:05:35"     "CURRENT"
253973    30470        11    "2014-12-31 06:11:08"     "CURRENT"
317167    30470        12    "2014-12-31 06:12:18"     "CURRENT"
362304    30470        14    "2015-01-01 06:11:09"     "CURRENT"

因此,在我的数据示例中,我必须更新ID为362304的行并将状态设置为“NEW”。 当然,我必须为所有产品做这件事,但首先我想试试这个例子。

2 个答案:

答案 0 :(得分:1)

我解决了我的问题所以我会与你分享。也许有更好的方法来做到这一点。如果您有任何想法请分享。

UPDATE 
    product_history 
SET 
    status = 'NEW'
FROM 
(
    SELECT 
        ph2.product_id, max(ph2.id) as id 
    FROM 
        product_history ph2
    WHERE 
        ph2.product_id = 30470
    GROUP BY ph2.product_id
) AS ph_temp
WHERE 
    product_history.id = ph_temp.id

答案 1 :(得分:1)

jarlh的观点是好的,所以我试了一下。 我用下面的查询创建了一个视图。

SELECT
    s.id
    ,s.product_id
    ,s.import_id
    ,s.modified_at
    ,case when
            (
            SELECT max(tmp.id)
            FROM stack28609281 tmp
            WHERE tmp.product_id = s.product_id
            ) = s.id
        then "NEW"
        else "CURRENT"
        end as status
FROM stack28609281 s

创建此视图后,您可以更改应用程序中的查询以使用视图而不是表格。