Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:计数重复项并按日期筛选_Sql_Sql Server_Database - Fatal编程技术网

SQL Server:计数重复项并按日期筛选

SQL Server:计数重复项并按日期筛选,sql,sql-server,database,Sql,Sql Server,Database,我有一个类似于此的数据结构 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 | 2

我有一个类似于此的数据结构

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)
但是当与
计数混用时,这就不再有效了。我得到了一个错误,沿着这条线

CreatedDateTime在having子句中无效,因为它未包含在聚合函数或group by子句中


有人能帮我找到正确的语法吗?

我想你的标准应该在
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
这应仅限于最近五周内发生的记录,以及那些
推荐
不为空的记录


出现错误的原因是,在计算
HAVING
子句时,数据库正在处理记录的聚合。由于
CreatedDateTime
字段不是聚合字段,因此导致错误。

我认为您的标准应该在
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
这应仅限于最近五周内发生的记录,以及那些
推荐
不为空的记录


出现错误的原因是,在计算
HAVING
子句时,数据库正在处理记录的聚合。由于
CreatedDateTime
字段不是聚合,因此会导致错误。

将行筛选器移动到
中的
位置,并将聚合筛选器保留在

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

SQL引擎筛选器使用
WHERE
条件筛选数据,然后使用
GROUP BY
列对行进行分组,最后应用
HAVING
条件筛选分组结果。

将行筛选器移动到
WHERE
并在
HAVING
上聚合筛选器

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

SQL引擎筛选器使用
WHERE
条件过滤数据,然后使用
GROUP BY
列对行进行分组,最后应用
HAVING
条件过滤分组结果。

谢谢,我最后通过在select/count中嵌套select BY date来解决问题。但是您的解决方案更加优雅和干净,并取代了我的代码。谢谢,我最终通过在select/count中嵌套select by date来解决问题。但您的解决方案更加优雅和干净,并取代了我的代码。