我有一个查询(主查询)是这样的。我在连接到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
再次感谢您的帮助。谢谢。
答案 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;