gpt4 book ai didi

MySQL 多次左外连接同一个表?

转载 作者:行者123 更新时间:2023-11-29 02:20:43 25 4
gpt4 key购买 nike

所以我遇到了一个MySQL的困境,看似比较简单,其实不然。

我有两个表:一个包含要显示的唯一 ID 列表,另一个表在时间戳旁边列出了 ID。

======   ============================
| ID | | ID | Timestamp |
====== ============================
| 1 | | 1 | 2015-10-10 00:00:00 |
| 2 | | 1 | 2015-10-10 00:10:00 |
| .. | | 2 | 2015-10-10 00:00:00 |
====== ============================

如果相关 id 在表 B 中有记录,我需要显示一个 bool 值 在两个日期时间 和它一直处于事件状态的最后一个日期 .


Visual Digram


我试过类似的东西:

SELECT 
a.`ID`,
MAX(b1.`Timestamp`) IS NOT NULL as 'Active',
MAX(b2.`Timestamp`) AS 'LastActive'
FROM `Table-A` a
LEFT OUTER JOIN `Table-B` b1
ON a.ID = b1.ID
AND b1.`Timestamp` BETWEEN @startTime AND @endTime
LEFT OUTER JOIN `Table-B` b2
ON a.ID = b2.ID
GROUP BY a.ID
;

目前不确定原因:但查询似乎无限运行并且得不到任何结果。任何人都可以建议正确的方法来获得我的查询所需的结果吗?


编辑:

这是上述查询的 EXPLAIN SELECT

EXPLAIN SELECT

最佳答案

使用这个

SELECT 
a.*,
IF(b1.cnt IS NULL, FALSE, TRUE) AS is_found,
IFNULL(b2.dt, '-') AS max_dt
FROM table1 a
LEFT OUTER JOIN (
SELECT
id,
COUNT(*) AS cnt
FROM table2
WHERE
`timestamp` BETWEEN '2015-01-01' AND '2015-12-31'
GROUP BY 1) b1
ON a.id=b1.id
LEFT OUTER JOIN (
SELECT id,
MAX(TIMESTAMP) AS dt
FROM table2
GROUP BY 1) b2
ON a.id=b2.id

关于MySQL 多次左外连接同一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32305547/

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