【发布时间】:2017-03-30 09:10:48
【问题描述】:
我有一个包含以下列的表格:
SessionID - 包含会话中的操作(假设每个 SessionID 1-10 行)
ActionName - 是动作的名称
时间 - 动作发生的时间
如果操作的名称是“a”或“b”,我需要返回一个新表,其列相同,并且每个 SessionID 仅包含 1 行。
也就是说,我的新表的每个 SessionID 应该有 1 行,其中包含操作“a”或“b”。
我试过了:
CREATE TABLE U_SessionID (
SELECT DISTINCT(SessionID) AS SessionID FROM test1)
;
我将唯一的会话复制到一个新表中
SELECT U_SessionID.SessionID, test1.ActionName, test1.SessionID
FROM test1
INNER JOIN U_SessionID ON (SELECT SessionID
FROM test1
WHERE U_SessionID.SessionID = test1.SessionID AND (ActionName =
"a" OR ActionName = "b")
ORDER BY Time DESC
LIMIT 1);
但是这段代码导致 MySQL 工作台崩溃(执行查询超时),我不知道它是否有效。
样本数据:
你能想出一个更轻松的查询来运行它吗?
也许更好的方法是:
- 获取所有包含操作“a”或操作“b”的行:
SELECT * FROM test1 WHERE ActionName = "a" OR ActionName = "b";
- 仅根据 SessionID 删除重复项(无论时间顺序如何)
对此有什么想法?
【问题讨论】:
-
我认为你的
on子句不完整 -
您能给我们提供样本数据和预期结果吗?
-
@Jens 添加,谢谢
-
在您的查询中,您在示例数据中仅引用了两个表?请也添加ddl