请帮我查询SQL查询。
我的数据表结构是:
如何选择没有重复的所有行Event_ID?
Event_NAME
主要必须包含 http://
但如果 http:// 不存在Event_NAME
,则Event_NAME
必须包含连接
最后选择结果
语法Oracle。
提前感谢所有人的帮助。
答案 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
;