gpt4 book ai didi

mysql - 选择查询中的选择查询?

转载 作者:行者123 更新时间:2023-11-29 01:24:01 24 4
gpt4 key购买 nike

所以我想按月在表格中比较新用户和回访用户。我有一个表,其中包含带有用户名和日期戳的每个操作。

例如,我可以轻松提取在 2011 年 1 月执行操作的用户。要查看每个用户是否是新用户,我需要然后根据所有以前的记录(2011 年 1 月之前)运行他们的用户名。

在我的摸索中,我想到了以下内容:

  SELECT ini.username,
MIN(ini.datetime) AS firstAction,
COUNT(ini.datetime) AS numMonth,
(SELECT COUNT(*)
FROM tableActions tot
WHERE tot.username = ini.username
AND tot.datetime < '201101%'
AND tot.datetime > '201001%') AS numTotal
FROM tableActions ini
WHERE DATETIME >= '201101%'
AND DATETIME < '201102%'
GROUP BY ini.username
ORDER BY firstAction

它没有错误,但也没有完成。似乎很激烈。

最佳答案

您可以将查询重写为(假设 tableactions.datetimeDATETIME 数据类型):

   SELECT ini.username,
MIN(ini.datetime) AS firstAction,
COUNT(ini.datetime) AS numMonth,
x.numTotal
FROM tableActions ini
LEFT JOIN (SELECT tot.username,
COUNT(*) AS numTotal
FROM tableActions tot
WHERE tot.datetime > '2010-01-01'
AND tot.datetime < '2011-01-01'
GROUP BY tot.username) x ON x.username = ini.username
WHERE ini.datetime BETWEEN '2011-01-01' AND '2011-01-31'
GROUP BY ini.username
ORDER BY firstAction

至少在 username 上建立索引可能会有所帮助,尽管使用 usernamedatetime 的覆盖索引值得考虑。

datetime 比较看起来很可疑 - LIKE 是唯一支持通配符的。

关于mysql - 选择查询中的选择查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7768193/

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