【问题标题】:Oracle get top row from union of queriesOracle 从查询联合中获取第一行
【发布时间】:2016-04-20 00:23:38
【问题描述】:

我有一个查询是另外 3 个复杂查询的联合。像下面这样的东西

SELECT 'type_one' as typename, typeid, typetitle from abc, def
UNION
SELECT 'type_two' as typename, typeid, typetitle from xyz, pqr
UNION
SELECT 'type_three' as typename, typeid, typetitle from mno, ijk
order by date desc

上面的查询说返回 15 条记录,按日期 desc 排序。我想获取带有'type_two'的记录和最近的日期作为第一行(可能有不止一行带有'type_two'),然后获取按日期desc排序的其余记录。任何人都可以指出一种在 Oracle 中执行此操作的方法吗?谢谢

【问题讨论】:

    标签: oracle


    【解决方案1】:

    使用 CASE 为所需的列赋予不同的权重

    SELECT 'type_one' as typename, typeid, typetitle from abc, def
    UNION
    SELECT 'type_two' as typename, typeid, typetitle from xyz, pqr
    UNION
    SELECT 'type_three' as typename, typeid, typetitle from mno, ijk
    order by CASE WHEN typename='type_two' THEN 0 ELSE 1 END,date desc
    

    【讨论】:

    • 这将给出所有带有 type_two 的记录的结果,然后是下面的。我只需要 1 条记录,其中 type_two 作为第一条记录,其余的应该是按日期排序的所有类型的混合......希望这很清楚。谢谢
    • 请告诉我如何做到这一点?
    猜你喜欢
    • 1970-01-01
    • 2016-03-14
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    相关资源
    最近更新 更多