programing

SQL 요청 "...에 구문 오류가 있습니다.오버...주문 기준... 사이..."(이전 버전과 새 버전)

goodsources 2023. 6. 20. 21:34
반응형

SQL 요청 "...에 구문 오류가 있습니다.오버...주문 기준... 사이..."(이전 버전과 새 버전)

SQL 테이블의 "values" 열에 있는 이전 9개 값으로 행 값을 평균화하는 이동 평균을 만들려고 합니다.

기본적으로, 저는 다음과 같은 것을 참조하십시오.

dateEvent                values
2021-07-05 06:00:10       2.0
2021-07-05 14:00:10       3.0
2021-07-05 20:00:10       4.0
2021-07-06 06:00:10       3.0
2021-07-06 14:00:10       1.0
2021-07-06 20:00:10       5.0
2021-07-07 06:00:10       4.0
2021-07-07 14:00:10       2.0
2021-07-07 20:00:10       3.0
2021-07-08 06:00:10       3.0
2021-07-08 14:00:10       3.0
2021-07-08 20:00:10       6.0
2021-07-09 06:00:10       3.0
2021-07-09 14:00:10       3.0
2021-07-09 20:00:10       5.0
2021-07-10 06:00:10       2.0
2021-07-10 14:00:10       3.0
2021-07-10 20:00:10       1.0

그리고 저는 다음을 원합니다.

dateEvent                values      averageValues    averagePerDay
2021-07-05 06:00:10       2.0           2.0
2021-07-05 14:00:10       3.0           2.5                2.50
2021-07-05 20:00:10       4.0           3.0
2021-07-06 06:00:10       3.0           3.0
2021-07-06 14:00:10       8.0           4.0                3.60
2021-07-06 20:00:10       4.0           4.0
2021-07-07 06:00:10       2.0           3.7
2021-07-07 14:00:10       2.0           3.5                3.54
2021-07-07 20:00:10       3.0           3.44
2021-07-08 06:00:10       3.0           3.4
2021-07-08 14:00:10       3.0           3.5                3.57
2021-07-08 20:00:10       6.0           3.8
2021-07-09 06:00:10       3.0           3.7
2021-07-09 14:00:10       3.0           3.7                3.60
2021-07-09 20:00:10       5.0           3.4
2021-07-10 06:00:10       2.0           3.2
2021-07-10 14:00:10       3.0           3.3                3.23
2021-07-10 20:00:10       1.0           3.2

다음을 사용하여 로컬 서버(마지막 버전)에서 문제가 없었습니다.

SELECT *,
    (CASE WHEN COUNT(*)
    OVER(ORDER BY dateEvent ROWS BETWEEN 10 PRECEDING AND 0 FOLLOWING) > 10
        THEN AVG(values)
        OVER(ORDER BY ID ROWS BETWEEN 10 PRECEDING AND 0 FOLLOWING)
        ELSE values
        END)
        AS 'averageValues' FROM f16
        group by CAST(dateEvent AS DATE)

그러나 이전 서버(업데이트 권한이 없습니다.)에서는 "OVER(ORDER BY..." 주변의 3행 구문 오류를 제공합니다.

뭐가 잘못됐는지 알아요?저는 다른 방법들을 시도해 보았지만 아무 것도 효과가 없었습니다.저는 다른 방법에 대해 개방적이지만, 저는 가깝다고 생각합니다.단지 작은 구문 문제일 뿐입니다.

정말 감사해요.

SQL 테이블의 "값" 열에서 마지막 10개 값을 평균화하려고 합니다.

하위 쿼리를 사용하여 이 작업을 수행할 수 있습니다.

select avg(value)
from (select f16.*
      from f16
      order by dateEvent desc
      limit 10
     ) f;

당신이 설명하고 있는 문제에는 창 기능이 필요하지 않습니다.

편집:

귀하의 의견에 따라:

select f16.*,
       avg(value) over (order by dateevent rows between 10 preceding and current row) as avg_10
from f16;

여기에 db<>fidle이 있습니다.

언급URL : https://stackoverflow.com/questions/68588314/syntax-error-in-sql-request-over-order-by-between-older-versus

반응형