gpt4 book ai didi

mysql - 如何在不使用子查询的情况下过滤重复数据

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

数据

id   amount created_at
"1" "105" "2018-01-28 15:22:00"
"2" "120" "2018-01-28 15:23:00"
"3" "200" "2018-01-28 15:24:00"
"4" "205" "2018-01-28 15:24:10"
"5" "230" "2018-01-28 15:25:00"

这是我的表字段和数据,我的cronjob每分钟运行一次,但由于某种原因,它可能会在同一分钟再次运行,因此我需要按日期到分钟过滤数据组

我尝试过的

SELECT COUNT(*), SUM(`amount`), MAX(`amount`), MIN(`amount`)
FROM (
SELECT *
FROM `stats`
GROUP BY DATE_FORMAT(`created_at`, '%Y-%m-%d %H:%i')
) AS tmp
GROUP BY DATE_FORMAT(`created_at`, '%Y-%m-%d %H:%i')

结果正是我需要的,但我听说由于效率问题,子查询总是最后的选择,有其他方法吗?

"1" "105"   "105"   "105"
"1" "120" "120" "120"
"1" "200" "200" "200"
"1" "230" "230" "230"

最佳答案

您的预期输出意味着您需要每分钟一条记录,以及该分钟具有最小 id 或金额的记录。假设您想要最小的 id,那么您可以尝试以下查询:

SELECT s1.*
FROM stats s1
INNER JOIN
(
SELECT
DATE_FORMAT(created_at, '%Y-%m-%d %H:%i') AS created_at
MIN(id) AS min_id
FROM stats
GROUP BY DATE_FORMAT(created_at, '%Y-%m-%d %H:%i')
) s2
ON DATE_FORMAT(s1.created_at, '%Y-%m-%d %H:%i') = s2.created_at AND
s1.amount = s2.min_id;

关于mysql - 如何在不使用子查询的情况下过滤重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48484248/

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