gpt4 book ai didi

mysql - 从表中获取最新数据,然后进行求和

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

我有一个表正在记录一些应用程序数据。

其结构如下

CREATE TABLE `log` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`website_id` int(11) DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`date` date DEFAULT NULL,
`pages` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;

数据

INSERT INTO `log` (`id`, `website_id`, `created_at`, `date`, `pages`)
VALUES
(1,1,'2014-04-03 00:30:01','2014-04-03',30),
(2,2,'2014-04-03 12:21:54','2014-04-03',13),
(3,1,'2014-04-04 01:10:12','2014-04-04',40),
(4,2,'2014-04-04 01:11:53','2014-04-04',20),
(5,1,'2014-04-04 02:43:31','2014-04-04',5),
(6,1,'2014-04-05 12:29:48','2014-04-05',8),
(7,1,'2014-04-05 13:48:51','2014-04-05',0),
(8,2,'2014-04-05 14:01:26','2014-04-05',20),
(9,2,'2014-04-05 15:51:01','2014-04-05',30),
(10,3,'2014-04-05 17:29:30','2014-04-05',15);

我想要做的是提取每个网站当天的最新记录,然后对其进行求和,以便获得页面列的总体计数。

所以预计有 3 行

2014-04-03 | 43
2014-04-04 | 25
2014-04-05 | 45

因此,在获取网站的行时,它需要先获取最新创建的行,所以这里

(6,1,'2014-04-05 12:29:48','2014-04-05',8),
(7,1,'2014-04-05 13:48:51','2014-04-05',0),

将使用 id 7,因为它较新。 因此,对于 2014-04-05,网站 ID 1 的页数将为 0,而不是 8

select date, sum(pages) from log group by date

结果

2014-04-03 | 43
2014-04-04 | 65
2014-04-05 | 73

它的出路,因为它不过滤,但我不知道如何过滤它。

最佳答案

试试这个:

SELECT L1.`date`, SUM(L1.`pages`) `pages`
FROM `log` L1
JOIN
(
SELECT `website_id`, MAX(`created_at`) as `created_at`
FROM `log`
GROUP BY `website_id`, `date`
) L2
ON L1.`website_id` = L2.`website_id`
AND L1.`created_at` = L2.`created_at`
GROUP BY `date`

<强> SQL FIDDLE DEMO

关于mysql - 从表中获取最新数据,然后进行求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23316385/

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