SQL选择查询,用于丢弃与另一行共享某些值的行

时间:2016-06-29 10:10:38

标签: sql oracle

假设我有下一个SQL表,包含以下示例值:

ID    Date        User     Publish
----------------------------------
1     05/20/16    Peter    1
2     05/20/16    Peter    2      <= Discarded
3     05/20/16    John     2
4     05/28/16    John     1
5     05/28/16    John     2      <= Discarded
6     07/01/16    Peter    2
7     07/01/16    John     2

我想要获得的是一个选择所有行的查询,但是如果同一日期和用户有两行,请使用&#39;发布&#39;值为&#39; 1&#39;,所以在示例中我得到行1,3,4,6和7。

我以编程方式解决了这个问题,但我想知道是否存在一种通过正确的SQL查询解决问题的方法。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

对于publishdate的每一组,这将丢弃第一行(按user排序)以外的所有内容:

SELECT ID, "Date", User, Publish
FROM   (
  SELECT t.*,
         ROW_NUMBER() OVER ( PARTITION BY "Date", User ORDER BY Publish ) AS rn
  FROM   table_name t
)
WHERE rn = 1;