gpt4 book ai didi

mysql - 如何在不使用子查询的情况下按最小日期计算新用户?

转载 作者:行者123 更新时间:2023-12-05 03:18:03 24 4
gpt4 key购买 nike

我有一个事件表,其中每个用户都注册了多个日期。每个用户的最短日期将是每个用户的 join_date。我需要为每个最小日期 (join_date) 的每个用户进行计数。我已经通过下面的子查询实现了我的意图:

SELECT COUNT(*) AS new_users, join_date
FROM (SELECT id, min(idate) AS join_date FROM t1 GROUP BY id ORDER BY idate) AS nu
GROUP BY nu.join_date;

enter image description here

我的问题如下...是否可以在不使用子查询的情况下执行我需要的操作?我一直在尝试使用内部联接,但没有令人满意的结果。

我将表的创建留给您,其中包含要插入的数据以及指向带有已创建架构的 sqlfiddle 的链接,以便您可以尝试。

CREATE TABLE t1 (
idate DATE,
id INT
);

INSERT INTO t1 (idate, id) VALUES
('2017-01-01', 1),('2017-01-02', 1),('2017-01-03', 1),('2017-01-04', 1),('2017-01-05', 1),
('2017-01-01', 2),('2017-03-04', 2),('2017-04-06', 2),('2017-07-08', 2),('2017-08-12', 2),
('2017-01-01', 3),('2017-02-02', 3),('2017-08-03', 3),('2017-09-12', 3),('2017-11-11', 3),
('2017-01-02', 4),('2017-03-02', 4),('2017-03-13', 4),('2017-04-04', 4),('2017-05-05', 4),
('2017-01-03', 5),('2017-01-12', 5),('2017-05-03', 5),('2017-09-04', 5),('2017-10-05', 5),
('2017-01-03', 6),('2017-01-05', 6),('2017-01-07', 6),('2017-01-08', 6),('2017-01-10', 6),
('2017-01-04', 7),('2017-01-11', 7),('2017-01-13', 7),('2017-01-14', 7),('2017-01-15', 7),
('2017-01-05', 8),('2017-01-22', 8),('2017-01-23', 8),('2017-02-15', 8),('2017-02-25', 8),
('2017-01-05', 9),('2017-01-06', 9),('2017-01-07', 9),('2017-01-08', 9),('2017-01-09', 9);

http://sqlfiddle.com/#!9/ef11d6

非常感谢您。

最佳答案

使用 COUNT() 窗口函数聚合最小日期:

SELECT DISTINCT 
COUNT(*) OVER (PARTITION BY MIN(idate)) new_users,
MIN(idate) join_date
FROM t1
GROUP BY id;

参见 demo .

关于mysql - 如何在不使用子查询的情况下按最小日期计算新用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73868963/

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