带逻辑的SQL查询

时间:2016-01-11 00:20:32

标签: sql oracle

请帮我查询SQL查询。

我的数据表结构是:

database

如何选择没有重复的所有行Event_ID?

Event_NAME主要必须包含 http://

但如果 http:// 不存在Event_NAME,则Event_NAME必须包含连接

最后选择结果

enter image description here

语法Oracle。

提前感谢所有人的帮助。

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望选择包含' http://'的Event_NAME的所有行,然后选择第一组中没有' Connect'的任何事件。在Event_NAME中。

我假设唯一的可能性就是你上面显示的那些 - 要么有两个条目(http和连接)用于某个活动,要么就是' Connect&# 39; - 虽然这个查询可以适用于其他情况。

查询是1.所有事件与' http://'之间的联合。在Event_NAME中,以及2.在第一组中没有Event_ID并且有' Connect'在他们的Event_NAME中。

可能有更好的方法可以做到这一点,但它可以在Oracle中使用测试数据:

SELECT * FROM eventtest WHERE Event_NAME LIKE 'http://%'
UNION
SELECT * FROM eventtest
WHERE Event_ID NOT IN
    (SELECT Event_ID FROM eventtest WHERE Event_NAME LIKE 'http://%');

答案 1 :(得分:2)

这里有两种方法,只需要一次传递数据:

SELECT
      Event_ID
    , MAX(Event_NAME) AS Event_NAME
FROM eventtest
GROUP BY
      Event_ID
;

SELECT
      ID
    , Event_ID
    , Event_NAME
FROM (
      SELECT
            ID
          , Event_ID
          , Event_NAME
          , ROW_NUMBER() OVER (PARTITION BY Event_ID ORDER BY Event_NAME DESC) AS rn
      FROM eventtest
      ) dt
WHERE rn = 1
;