我有3张这样的桌子:
我想得到这个:
“通知”表中有所有行(选定属性)。
然后是通知的位置名称。发生(Notification.Location_ID = Location.ID
)
以及在通知时间段内在同一位置发生的进程数。 (COUNT(Process.ID) WHERE Notification.Location_ID = Process.Location_ID AND DateTime > Begin AND DateTime < End
)
我认为正确连接Process table时遇到问题。
整个SQL查询应如何获得所需的输出?谢谢。
答案 0 :(得分:1)
看起来前两个表之间的联接很好,所以,我建议您在SELECT子句的末尾在FROM之前添加以下子查询,以计算行的计数器。
(SELECT Count(*) FROM Process WHERE Process.Location_ID = Location.ID) AS Counter
如果在联接中包含了第三张表(过程),则必须将其删除。
答案 1 :(得分: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;