netezza删除具有不同时间戳字段的记录,其中特定字段相同

时间:2015-07-24 14:12:12

标签: sql netezza

我有一个netezza表,数据在更新时会重叠,但每个关联的timestamp字段会有所不同。例如:

+-----------------+----------+-------------+-----+
|       ts        | first_nm |   last_nm   | val |
+-----------------+----------+-------------+-----+
| 4/1/2015 4:15pm | ben      | bloomington | 12  |
| 4/1/2015 4:20pm | ben      | bloomington | 4.5 |
| 4/1/2015 4:20pm | andrew   | bloomberg   | 2.8 |
+-----------------+----------+-------------+-----+

我想保留以下记录并删除本布鲁明顿的早期时间戳:

+-----------------+----------+-------------+-----+
|       ts        | first_nm |   last_nm   | val |
+-----------------+----------+-------------+-----+
| 4/1/2015 4:20pm | ben      | bloomington | 4.5 |
| 4/1/2015 4:20pm | andrew   | bloomberg   | 2.8 |
+-----------------+----------+-------------+-----+

所以,基于first_nmlast_nm是不同的,我怎样才能保持最新的ts具有最新值?

我想我可以使用row_number()函数,但我不确定如何在我的delete语句中实现它。

2 个答案:

答案 0 :(得分:3)

您可以使用以下示例删除不是最新时间戳的所有行。我添加了窗口函数Region M Y NORTH 654321 123456 NORTH 234567 432765 >>total 888888 556221 SOUTH 567234 321456 >>total 567234 321456 CENTER 456123 987654 >>Total 456123 987654 >>>>Totals 1912245 1865331 作为示例。

row_number()

答案 1 :(得分:0)

应该采用相同的较短解决方案是:

 DELETE FROM table t
 WHERE 
   EXISTS (SELECT * FROM table 
           WHERE t.rwid < rwid 
             AND t.first_nm = first_nm 
             AND t.last_nm = last_nm)