如何解决查询失败---按查询顺序选择count*,得到sqlserver错误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
ORDER BY子句中的“ TableA.TIME”列无效,因为它既不在聚合函数中也不在GROUP BY子句中。
如何使其正确?
我执行此过程的结果
我想统计一页的记录,并检查是否等于页面大小。然后决定再次查询真实数据并进行缓存。
假设数据已被一次一个地添加,我想然后一页一页地统计数据,假设一页包含50条记录。因此,首先我必须按时间asc排序,然后按“偏移量限制”获取目标页面的数量,而该数量等于redis缓存数据的数量,如果没有,我将从redis获取数据,这意味着插入一些新数据后,我将从db中获取数据,然后将新计数和新数据再次缓存到redis中。 所有数据都应按页面升序按时间升序排列,这意味着最后一页的计数将更改,因此我需要执行此类查询以检查一页的实际计数。
解决方法
查询的开始使我们认为您希望获得一个输出,该输出是两个日期之间表中所有项目的计数:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。