gpt4 book ai didi

SQL 服务器 : count duplicates and filter by date

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:41 25 4
gpt4 key购买 nike

我有一个看起来等同于此的数据结构

UserID| Rating | CreatedDate |
------+--------+-------------+
101 | 10 | 21-02-2018 |
101 | 10 | 18-02-2018 |
102 | 6 | 12-01-2018 |
103 | 3 | 01-02-2018 |
101 | 8 | 25-03-2018 |
102 | 2 | 21-02-2017 |
101 | 1 | 21-08-2017 |

我正在尝试从 SQL Server 2017 中检索特定用户给出的所有不同评分 (1-10) 的计数。

我正在使用这段代码:

 SELECT Rating, COUNT(Rating) AS Count
FROM dbo.tableName
GROUP BY Rating, UserId
HAVING (COUNT(Rating) >= 1) AND (UserId = '101')
ORDER BY Count DESC

但是我遇到的问题是,我希望只对过去 5 周内创建的条目运行此查询,以过滤到我以前使用的最后 5 周:

(CreatedDateTime > DATEADD(week, - 5, GETDATE())) AND (Recommend IS NOT NULL)

但是当与 Count 混合使用时,它就不再起作用了。我得到一个错误

CreatedDateTime is invalid in the having clause because it is not contained in either aggregate function or group by clause

谁能帮我得到正确的语法?

最佳答案

我认为你的条件应该在 WHERE 子句中:

SELECT
Rating,
COUNT(Rating) AS Count
FROM dbo.tableName
WHERE
CreatedDateTime > DATEADD(week, - 5, GETDATE()) AND
Recommend IS NOT NULL
GROUP BY
Rating,
UserId
HAVING
COUNT(Rating) >= 1 AND UserId = '101'
ORDER BY
Count DESC

这应该仅限于最近五周内发生的记录,以及那些 Recommend 不为 NULL 的记录。

您收到错误的原因是,在评估 HAVING 子句时,数据库正在处理记录的聚合。由于 CreatedDateTime 字段不是聚合,因此导致错误。

关于SQL 服务器 : count duplicates and filter by date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49532891/

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