选择整个分区,其中分区中的最大行大于1

时间:2014-10-09 17:18:27

标签: sql netezza

我正在通过一些非唯一标识符进行分区,但我只关注至少有两个结果的分区。如果有一个指定的标识符,所有实例的出现方法是什么?

查询我正在使用:

SELECT ROW_NUMBER() OVER
        (PARTITION BY nonUniqueId ORDER BY nonUniqueId, aTimeStamp) as row
    ,nonUniqueId
    ,aTimeStamp
FROM myTable

我得到了什么:

row | nonUniqueId | aTimeStamp
---------------------------------
1   | 1234        | 2014-10-08...
2   | 1234        | 2014-10-09...
1   | 1235        | 2014-10-08...
1   | 1236        | 2014-10-08...
2   | 1236        | 2014-10-09...

我想要的是什么:

row | nonUniqueId | aTimeStamp
---------------------------------
1   | 1234        | 2014-10-08...
2   | 1234        | 2014-10-09...
1   | 1236        | 2014-10-08...
2   | 1236        | 2014-10-09...

感谢任何方向:)

1 个答案:

答案 0 :(得分:4)

基于语法,我假设这是SQL Server 2005或更高版本。我的答案就是为了这个。

你有两个选择。

一,使用CTE:

;WITH CTE AS (
    SELECT ROW_NUMBER() OVER
            (PARTITION BY nonUniqueId ORDER BY nonUniqueId, aTimeStamp) as row
        ,nonUniqueId
        ,aTimeStamp
    FROM myTable
)
SELECT *
FROM CTE t
WHERE EXISTS (SELECT 1 FROM CTE WHERE row = 2 and nonUniqueId = t.nonUniqueId);

或者,您可以使用子查询:

SELECT ROW_NUMBER() OVER
        (PARTITION BY nonUniqueId ORDER BY nonUniqueId, aTimeStamp) as row
    ,nonUniqueId
    ,aTimeStamp
FROM myTable t
WHERE EXISTS (SELECT 1 FROM myTable 
        WHERE nonUniqueId = t.nonUniqueId GROUP BY nonUniqueId, aTimeStamp HAVING COUNT(*) >= 2);