如何获取最近30天内广告最多的用户?

问题描述 投票:0回答:1

我的数据库中有两个表,如下所示:

类别表:

列名称 列类型
身份证 INT
姓名 文字
ID家长

和广告表:

列名称 列类型
身份证 INT
用户ID INT
添加日期 日期时间
ID类别 INT
价格

我的项目中有一个任务如下:

The user ID of the user who has the most ads in the period of one month (thirty days) in the real estate consultant category (including Estate) for each advertiser.

我的代码是:

SELECT IDUser
FROM (
    SELECT a1.IDUser,
           COUNT(a2.ID) AS AdCount
    FROM advertisements a1
    INNER JOIN advertisements a2 ON a1.IDUser = a2.IDUser
    INNER JOIN categories c ON a2.IDCategory = c.ID
    WHERE c.Name LIKE '%Estate%'
    AND a2.DateAdded BETWEEN a1.DateAdded AND DATE_ADD(a1.DateAdded, INTERVAL 30 DAY)
    GROUP BY a1.IDUser, a1.DateAdded
) AS Sub
GROUP BY IDUser
ORDER BY MAX(AdCount) DESC
LIMIT 1;

我的代码问题:

我认为我的代码有问题:它没有计算所有三十天

和 我还想重写代码并使用窗口函数

你能帮我做这个吗?

sql mysql common-table-expression window-functions
1个回答
0
投票

您可以使用以下查询,

SELECT IDUser, max(AdCount) FROM
(SELECT a1.IDUser as IDUser, COUNT(a1.ID) AS AdCount
    FROM advertisements a1
    INNER JOIN categories c ON a2.IDCategory = c.ID
    WHERE c.Name LIKE '%Estate%'
    AND a1.DateAdded >= a1.DateAdded - INTERVAL 30 DAY
    GROUP BY a1.IDUser) T1;
© www.soinside.com 2019 - 2024. All rights reserved.