SQL修改

时间:2015-12-02 18:56:03

标签: sql netezza

我有一个查询(主查询)是这样的。我在连接到Netezza DB的Toad中执行此操作。

SELECT *
  FROM db1.schema1.Table1
WHERE (pd_num, pd_num_mtr, pd_num_prefix, sqr_num) IN
          (SELECT pd_num,
                  pd_num_mtr,
                  pd_num_prefix,
                  max (sqr_num) sqr_num
             FROM db1.schema1.table1
            WHERE create_date >= '01/01/2012' AND cd_operator <> 'N'
           GROUP BY pd_num, pd_num_mtr, pd_num_prefix)

当我执行此操作时,我得到了大约100万条记录作为输出。我进一步执行了一个查询(Query2)来分析属于该组的记录数,如下所示。

select pd_num_mtr,pd_num_prefix,count(*)
from db1.schema1.table1 
GROUP BY pd_num, pd_num_mtr
order by count(*) desc

我得到了以下内容。

pd_num pd_num_mtr count(*)
001      15          500
002      15          200
003      30          100

这意味着我为pd_num和pd_num_mtr组合提取了大约500条记录,其中每条记录都具有update_timestamp值。现在需要修改如下。

所以在这500条记录中,我只需要拉出一个最大update_timestamp的记录,这将把计数限制为只有1条记录,而不是200条记录中的500.1条记录,100条记录中的1条记录,最大更新时间戳值。

如何修改第一个查询(主查询)以实现此目的?因此,如果运行query2,我将得到以下作为输出。

pd_num pd_num_mtr count(*)
001        15          1
002        15          2
003        30          3

再次感谢您的帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

我们必须使用row_number函数。假设&quot; update_timestamp&#39;作为你的时间戳列。

SELECT PD_NUM_MTR,PD_NUM_PREFIX 
FROM
(
   SELECT PD_NUM_MTR,PD_NUM_PREFIX,ROW_NUMBER() OVER (PARTITION BY PD_NUM_MTR,PD_NUM_PREFIX  ORDER BY update_timestamp desc ) AS RK
   FROM DB1.SCHEMA1.TABLE1 
)
WHERE RK=1;