2014-12-21 4 views
-3

Я бы хотел, чтобы запрос дал мне результирующие идентификаторы, когда новый/последующий «Закрыть» оказался выше previous Высокий (вы видите, что даты постепенно растут в направлении дна).Сравнение двух строк

ID | Date  | Open | High | Low | Close 
--------------------------------------------- 
1 | 01.01.2014 | 20 | 22 | 19 | 21 
2 | 02.01.2014 | 21 | 23 | 20 | 23  (this Close is higher than previous High) 
3 | 03.01.2014 | 23 | 26 | 18 | 19 
4 | 04.01.2014 | 19 | 24 | 18 | 24 

Например, для выше цен на акции, то результат будет возвращаться: «2», так как «Закрыть» в ID_2 была выше, чем «High из ID_1».

Я воюю с САМОСТОЯТЕЛЬНЫМ, но не могу заставить это работать. Был бы очень признателен за указатель на правильное направление.

+3

Какие СУБД вы используете? – Mureinik

+1

Пожалуйста, покажите свою попытку «возиться с САМО-ПРИСОЕДИНЕНИЕМ». – Barmar

+0

Вы можете сделать это, используя курсоры в oracle DataBase – Prashant

ответ

-5

Здесь вы идете

DDL

create table shares 
(
    id int, 
    date_d date, 
    open int, 
    high int, 
    low int, 
    close int 
); 


insert into shares (id, date_d, open, high, low, close) 
values 
(1,'01-JAN-2014',20,22,19,21); 

insert into shares (id, date_d, open, high, low, close) 
values 
(2,'02-JAN-2014',21,23,20,23); 
insert into shares (id, date_d, open, high, low, close) 
values 
(3,'03-JAN-2014',23,26,18,19); 
insert into shares (id, date_d, open, high, low, close) 
values 
(4,'04-JAN-2014',19,24,18,24); 

ваш SQL

select ID,S.DATE_D,OPEN,HIGH,LOW,CLOSE FROM SHARES S 
WHERE CLOSE > (SELECT HIGH FROM SHARES WHERE DATE_D = S.DATE_D-1) 

вы даже можете увидеть предыдущий максимум в этом SQL

select ID,S.DATE_D,OPEN,HIGH,LOW,CLOSE, (SELECT HIGH FROM SHARES WHERE DATE_D = S.DATE_D-1) as prev_high FROM SHARES S 
WHERE CLOSE > (SELECT HIGH FROM SHARES WHERE DATE_D = S.DATE_D-1) 

http://sqlfiddle.com/#!4/6b08a/12

+0

Выше это решение со ссылкой на скрипку. Вы можете использовать первый запрос, чтобы вернуть результат, а второй запрос - фактически проверить предыдущий максимум – szakwani

Смежные вопросы