【问题标题】:Select distinct row or particular value row if not distinct如果不是不同的,则选择不同的行或特定的值行
【发布时间】:2018-11-01 04:08:53
【问题描述】:

我有一个表,如下所示,如果值 b 不存在,则我想按 id 获取值为 b 的记录,然后值为 b。我在表中有一个关联的日期卷,我可以使用它按日期排序。

我尝试从移动设备发布屏幕图像,但附加失败。 也无法发布我尝试过的 sql,因为这里官方不允许。

我试图解释这个问题如下

Persid.      Value.    Date
1                 a
1                 a
1                 a
2                 b
2                 a
2                 a

预期结果

1           a.       Latest date
2           b        any date

我尝试在 id 和 value 列上使用 group by 来获取计数,但我无法理解如何使用该计数来过滤记录。

非常感谢任何帮助:)

【问题讨论】:

    标签: sql oracle join oracle11g


    【解决方案1】:

    你可以使用row_number():

    select id, value, date
    from (select t.*,
                 row_number() over (partition by persid
                                    order by value desc, date desc
                                   ) as seqnum
          from t
         ) t
    where seqnum = 1;
    

    这将获取任何值的最新日期。请注意,value desc 是如此“b”出现在“a”之前。如果您的值没有按字母顺序排列,那么您可以使用case 或其他机制来设置正确的排序顺序。

    【讨论】:

    • 当我将 value 更改为 asc order 时,这似乎有效。我已经在不同的表上有一个复杂的分区查询,它的结果应该被过滤,所以基本上它是一个分区上的分区:d。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多