-1

我有3个这样的表:

架构

我想得到这个:

输出

通知表中有所有行(选定的属性)。
然后是通知所在的位置名称。发生(Notification.Location_ID = Location.ID
和在通知的时间段内发生在同一位置的进程计数。( COUNT(Process.ID) WHERE Notification.Location_ID = Process.Location_ID AND DateTime > Begin AND DateTime < End)

我认为我在正确加入 Process 表时遇到问题。
整个 SQL 查询应该如何获得想要的输出?谢谢。

4

2 回答 2

1

看起来前两个表之间的连接是好的,所以,我建议您在 FROM 之前的 SELECT 子句末尾添加以下子查询,以计算行的计数器。

(SELECT Count(*) FROM Process WHERE Process.Location_ID = Location.ID) AS Counter

如果您已在联接中包含第三个表(进程),则必须将其消除。

于 2019-01-03T12:57:02.220 回答
0

我认为您想加入process公共位置 ID 和时间戳在时间范围内。

SELECT n.name,
       n.begin,
       n.end,
       l.name,
       count(p.id)
       FROM notification n
            LEFT JOIN location l
                      ON l.id = n.location_id
            LEFT JOIN process p
                      ON p.location_id = n.location_id
                         AND p.datetime >= n.begin
                         AND p.datetime < n.end
       GROUP BY n.name,
                n.begin,
                n.end,
                l.name;
于 2019-01-03T13:03:45.307 回答