gpt4 book ai didi

子查询之间的SQL

转载 作者:行者123 更新时间:2023-12-04 16:48:19 24 4
gpt4 key购买 nike

我想知道如何运行一个 SQL 查询,该查询返回时间在有效段中的事件。

例如,我有两个表,

事件

event_id event_time
0 134
1 434
2 4300

分割
segment_type segment_start_time segment_end_time
data1 100 130
data1 200 500
data1 700 8000
veto1 400 440
data2 150 450
data2 4000 5000
veto2 175 200

我想要一个会返回的查询
event_id event_time
1 434
2 4300

我在想类似的事情
SELECT * 
FROM event
WHERE
event.event_time > (SELECT segment.segment_start_time FROM segment)
AND
event.event_time < (SELECT segment.segment_end_time FROM segment)

但这只是什么都不返回。我究竟做错了什么?

我要做的下一步是找到事件时间;

在“数据”段开始时间和结束时间之间 AND
不在“否决”段开始时间和结束时间之间

最后,我实际上有两种类型的数据段和否决段。我想返回有时间的事件;

'data1' 段开始时间和结束时间之间 AND

'data2' 段开始时间和结束时间之间 AND

不在“veto1”段开始时间和结束时间之间,并且

不在“veto2”段开始时间和结束时间之间

所以从我上面的示例表中,我想要的输出是
event_id event_time
2 4300

最佳答案

我将假设事件表中的条目通常多于段表中的条目。

这允许伪代码“对于每个段,检查哪些事件是有效的”。这允许在事件表上进行范围搜索。

SELECT
event.event_id, event.event_time
FROM
segment
INNER JOIN
event
ON event.event_time >= segment.segment_start_time
AND event.event_time < segment.segment_end_time
GROUP BY
event.event_id, event.event_time
GROUP BY仅当 segment 中的不同条目时才需要可以重叠。

另一种方法是使用伪代码“对于每个事件,检查是否有任何段与其重叠”。

但是,这样做将不允许范围搜索(请参阅我对@MarkByers 回答的评论)。

编辑 以下编辑问题...

据我了解更改,只有在以下情况下才应返回事件...
  • 事件时间至少在(一个 data1 段和一个 data2 段)内
  • 事件时间不在(任何 veto1 段或任何 veto2 段)内

  • SELECT
    event.event_id, event.event_time
    FROM
    segment
    INNER JOIN
    event
    ON event.event_time >= segment.segment_start_time
    AND event.event_time < segment.segment_end_time
    GROUP BY
    event.event_id, event.event_time
    HAVING
    0 = SUM(CASE WHEN segment_type = 'veto1' THEN 1 ELSE 0 END)
    AND 0 = SUM(CASE WHEN segment_type = 'veto2' THEN 1 ELSE 0 END)
    AND 1 = SUM(CASE WHEN segment_type = 'data1' THEN 1 ELSE 0 END)
    AND 1 = SUM(CASE WHEN segment_type = 'data2' THEN 1 ELSE 0 END)

    关于子查询之间的SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11879272/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com