다음 코드는 완전한 대답이 아닙니다. 두 개의 숫자를 비교합니다.
다음 값과 비교해야합니다. 두 데이터베이스에서 작업 한 후 다음,해야 "날짜"열이 정말 숫자입니다 가정하고 (당신이 문제의 제안으로) 어떤 구멍 상승 :
select t.*,
(case when tnext.value > t.value then 1 else 0 end) as "ascending"
from t left outer join
t tnext
on t."date" = tnext."date" - 1;
당신이 3 개 행을 비교할 경우, 더 설명이 필요 . 내가 생각할 수있는 정의가 귀하의 결과에 적용되지 않습니다.
편집 :
는 흠, 당신은 오름차순 시퀀스를 찾기 위해, 적어도 세 개의 행이 사람을 표시 할 것으로 보인다. 그렇다면 조금 더 어렵습니다. 다음은 다음 기술을 사용하여 시퀀스를 열거합니다. 시퀀스의 시작을 식별 한 다음 각 값까지의 시작 수를 계산합니다.
는, 오름차순 시퀀스의 시작을 식별 값이
아래로 어디로 쌍을 확인합니다 :
select t.*,
(select 1
from t tprev
where tprev."date" = t."date" - 1 and
tprev.value >= t.value
) as IsAscStart
from t;
는 각 시퀀스에게 자신의 ID를 제공하기 위해 :
select t.*
(select count(*)
from t t1 join
t tprev
on tprev."date" = t1."date" - 1 and
tprev.value > t1.value
where t1."date" <= t."date"
) as AscGrouping
from t;
이의 도전 요점은 그 때 순서의 길이를 얻고있다. 이 접근 방법은 SQL Server와 MySQL간에 매우 다양하므로 쉽게 데이터베이스에 의존하지 않는 방법을 생각할 수는 없습니다.
편집 II :
SQL 서버에서
, 당신은 당신이 아니라 원하는 것을 할 수 있습니다
with cte as (
select t.*
(select count(*)
from t t1 join
t tprev
on tprev."date" = t1."date" - 1 and
tprev.value > t1.value
where t1."date" <= t."date"
) as AscGrouping
from t
)
select t."date", t.value,
(case when seqlen >= 3 then 1 else 0 end) as "Ascending"
from (select cte.*, count(*) over (partition by AscGrouping) as seqlen
from cte
) t
이 오라클 – Randy
에서 LAG 기능이 될 것입니다 왜 녹음 "4"오름차순 = 1 "로 표기 "? –
이 경우 오름차순 패턴을 형성하는 시퀀스는 0.2, 0.4, 0.6입니다. 실제로 5의 오름차순 시퀀스를 찾으려고하지만 문제를 단순화하기 위해 3을 넣습니다. – user2755428