【问题标题】:SQL selection query that discards rows that share some value with another row丢弃与另一行共享某些值的行的 SQL 选择查询
【发布时间】:2016-10-31 23:34:14
【问题描述】:

假设我有下一个 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

我想要得到的是一个选择所有行的查询,但如果同一日期和用户有两行,则检索“发布”值为“1”的行,因此在示例中我得到了行1、3、4、6 和 7。

我以编程方式解决了这个问题,但我想知道是否存在通过适当的 sql 查询来解决它的方法。

任何帮助将不胜感激。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    这将丢弃每组dateuser 的第一行(按publish 排序)以外的所有行:

    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;
    

    【讨论】:

    • 在为“日期”和用户是保留字的问题制作示例时,我没有意识到。无论如何,答案是正确的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2012-06-30
    相关资源
    最近更新 更多