gpt4 book ai didi

MySQL 仅从最新日期获取列的 SUM

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

我有一个这样的表:

---------------------------------------
| id | name | points | date |
---------------------------------------
| 1 | ana | 1 | 2014-12-10 |
| 2 | tom | 3 | 2015-12-09 |
| 3 | jim | 1 | 2013-12-02 |
| 4 | ana | 9 | 2014-12-10 |
| 5 | tom | 3 | 2015-12-09 |
| 6 | jim | 1 | 2016-12-08 |
| 7 | jim | 5 | 2016-12-08 |
| 8 | ana | 2 | 2016-12-08 |
| 9 | ana | 1 | 2016-12-08 |
| 10 | tom | 2 | 2013-12-07 |
-------------------------------------

在这张表中,我有一组名字。这些名称可能在同一日期具有不同点的重复条目。他们也有不同日期的重复条目。日期各不相同,没有规律可循。

我的目标是返回以下内容:

name, SUM(points) WHERE MAX(date) for the name group

所以基本上我当前的查询是:

SELECT name, SUM(points) FROM table GROUP BY name;

但是,我需要这个来仅计算名称组中从该名称组的最新日期开始的点条目,而不是将所有日期的所有点相加。

我该怎么做?

最佳答案

要聚合每个名称的最新date,您可以加入生成MAX(date) 的子查询,同时加入name以及来自外表和子查询的 date。这允许您为该组 SUM()

SELECT
t.name,
SUM(points) AS total_points,
max_date
FROM
`table` t
JOIN (
-- Subquery produces latest date per name
SELECT
name,
MAX(date) AS max_date
FROM `table`
GROUP BY name
) name_dates
-- Join table to subquery on both name and the aggregate date
ON t.name = name_dates.name AND t.date = max_date
-- Group for the outer SUM()
GROUP BY t.name, max_date

这会产生结果:

+------+--------------+---------------------+
| name | total_points | max_date |
+------+--------------+---------------------+
| ana | 3 | 2016-12-08 00:00:00 |
| jim | 6 | 2016-12-08 00:00:00 |
| tom | 6 | 2015-12-09 00:00:00 |
+------+--------------+---------------------+

这是实际操作。 http://sqlfiddle.com/#!9/dece38/1(sqlfiddle 现在出现故障,可能需要将查询粘贴回去重新执行)

关于MySQL 仅从最新日期获取列的 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43131233/

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