1
기본적으로 레코드가 들어있는 테이블이 있습니다. 그리고 지금은 값이 단조롭게 증가하고 있는지를 판단해야합니다.SQL 서버가 값이 단조로운 지 확인하십시오.
CTE 표현 (코드는 아래 참조)을 사용하여 원하는 결과를 얻었지만 해결책은 나에게 상당히 명백한 것처럼 보입니다.
필드 값 시퀀스가 단조인지 여부를 판단하는 더 좋은 방법이 있습니까?
CREATE TABLE [dbo].[Measurements](
[ObjectID] [int] IDENTITY(1,1) NOT NULL,
[measDate] [datetime] NULL,
[measValue] [float] NULL
) ON [PRIMARY];
DECLARE
@ObjectID INT = 1;
with measSet as (
select row_number() over(order by measDate) rownum, measValue, measDate
from dbo.Measurements M
where M.measDate > convert(datetime, '2013-10-02 08:13:00', 120)
and M.ObjectID = @ObjectID
)
select case when count(b.DiffSign) = 1 then 1 else 0 end as IsMonotone
from (
select DiffSign from
(
select MSS.measDate , MSS.measValue, MSS.measValue- MSSD.measValue as Diff,
case
when MSS.measValue- MSSD.measValue is null then NULL
when MSS.measValue- MSSD.measValue= 0 then NULL
when MSS.measValue- MSSD.measValue< 0
then -1
else 1
end as DiffSign
from measSet MSS
left join measSet MSSD
on MSSD .rownum = MSS.rownum - 1
) a
where a.DiffSign is not null
group by a.DiffSign
) b
팁 : 당신이 할 수 있습니다를 'SIGN()'함수를 보라. 'Case Sign (MSS.measValue - MSSD.measValue)가 0 일 때 ... '. 다양한 솔루션의 실행 계획을 비교하십시오. 우아하게 보이는 것은 최적화 프로그램이 정상적으로 처리하지 않을 수 있습니다. – HABO
SIGN 함수에 대해 생각 나게하기 위해 Thnaks - 괜찮아요,하지만 내 경우에는 단조 분석가에서 "0"- 차이 값을 제외하는 것이 중요합니다 - 그들은 결과를 초래해서는 안됩니다. 그렇지 않으면 SIGN func을 의심없이 사용합니다. – xacinay