查询失败 --- select count(*) with order by got sqlserver error 8127

Query failed --- select count(*) with order by got sqlserver error 8127

假设我在 TableA 中有一些数据,如下所示

ID  TIME                    VAL
1   2020-10-01 12:00:12.000 test
2   2020-10-01 13:00:12.000 test2
3   2020-10-01 13:00:12.000 test2
4   2020-10-01 13:00:12.000 test2
5   2020-10-01 13:00:12.000 test2
6   2020-10-01 13:00:12.000 test2
7   2020-10-01 13:00:12.000 test2
8   2020-10-01 13:00:12.000 test2
9   2020-10-01 13:00:12.000 test2

我想按时间顺序和限制偏移量统计数据,我试过这样

SELECT COUNT(*)
FROM TableA
WHERE TIME>'2020-10-01 00:00:00' AND TIME<'2020-10-01 23:59:59'
ORDER BY TIME ASC OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY

但是我得到一个错误

Column "TableA.TIME" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.

在 SQL Server 2012

下执行查询

如何正确设置?

我做这个过程的结果

我想计算一页的记录并检查是否等于页面大小。然后决定再次查询真实数据并缓存它们。

假设数据已经按时间逐条添加,我要逐页统计数据,假设一页有50条记录。所以首先我必须按时间asc排序,然后通过'offset limit'获取目标页面的计数,而计数等于redis缓存数据的计数,我会从redis中获取数据,如果不是,这意味着这些是否插入了一些新数据,我将从数据库中获取数据,然后将新计数和新数据再次缓存到 redis 中。 所有的数据都应该按分页的时间升序排列,这意味着最后一页的计数会改变,所以我需要做这样的查询来检查一页的实际计数。

您的查询开头让我们认为您想要获得一个输出,即两个日期之间 table 中所有项目的计数:

SELECT COUNT(*)
FROM TableA
WHERE TIME>'2020-10-01 00:00:00' AND TIME<'2020-10-01 23:59:59'

但是查询的其余部分让我们认为您想要获取筛选元素的前 50 个元素:

ORDER BY TIME ASC OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY

如果要统计,只保留第一部分:

SELECT COUNT(*)
FROM TableA
WHERE Time BETWEEN '2020-10-01 00:00:00' AND '2020-10-01 23:59:59'

如果要得到结果,去掉计数:

SELECT *
FROM TableA
WHERE Time BETWEEN '2020-10-01 00:00:00' AND '2020-10-01 23:59:59'
ORDER BY TIME ASC OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY

我认为你可以这样做:

SELECT COUNT(*)
    from(
    select *
    FROM TableA
    WHERE TIME>'2020-10-01 00:00:00' AND TIME<'2020-10-01 23:59:59'
    ORDER BY TIME ASC OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY
    ) as x