gpt4 book ai didi

mysql - 如何使用这些数据编写复杂的查询?

转载 作者:行者123 更新时间:2023-11-29 14:59:07 25 4
gpt4 key购买 nike

我有一个表格类型:

id | text  | tel  | time
----------------------------
1 | text1 | tel1 | unixtime
2 | text1 | tel1 | unixtime
3 | text1 | tel1 | unixtime
4 | text2 | tel2 | unixtime
5 | text3 | tel3 | unixtime
6 | text3 | tel3 | unixtime

我希望它“干净”,尝试删除 text = tel 的所有行,并保留 time 最大的行。我是这样开始的:

SELECT concat(`text`, `tel`),
count(concat(`text`, `tel`))
FROM `ads` GROUP by concat(`text`, `tel`)
Having count(concat(`text`, `tel`)) > 1

有些东西有效,但有些东西全错了(但我仍然无法猜测如何删除,只留下一条重复的记录)。

最佳答案

我认为他错误地表达了这个问题,因为根据他的代码片段,他正在寻找文本+电话组合相同的行(因此是 CONCAT)。他不仅仅是寻找 text=tel 的行。

如果您愿意为此编写一个快速脚本而不是将其保留在纯 SQL 中,则可以分两步解决。

首先,找到 text+tel 重复的行:

mysql> 
SELECT count(id) as dupe_count,
text as dupe_text,
tel as dupe_tel,
max(time) as dupe_maxtime
FROM tbl
GROUP BY concat(text,tel)
HAVING dupe_count > 1;
+------------+-----------+----------+--------------+
| dupe_count | dupe_text | dupe_tel | dupe_maxtime |
+------------+-----------+----------+--------------+
| 4 | text1 | tel1 | 1285203547 |
+------------+-----------+----------+--------------+
1 row in set (0.00 sec)

然后迭代它们,并使用:

从 tbl 中删除,其中 text=$2 AND tel=$3 AND time <$4;

您还可以使用 dupe_count 结果执行“DELETE FROM tbl WHERE ... ORDER BY time ASC LIMIT x”,其中 x 是 dupe_count-1(有效地从每个 dupe 组中删除除一行之外的所有行)。

再花几分钟的时间,您可能可以将后一个 DELETE 逻辑移植到带有子查询的单个步骤中 - 但如果您只想运行一次,我建议编写脚本,循环结果,运行删除并完成。

关于mysql - 如何使用这些数据编写复杂的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3770846/

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