Выбор SQL, возвращать результаты, только если курс или цифра изменяются в последовательности даты и времени. - PullRequest
1 голос
/ 15 марта 2019

Я пытаюсь вернуть значения в базе данных SQL, разделенной временными полосами, мне нужно только возвращать результаты, когда скорость изменяется, например, от начального временного диапазона; BH (выходной день), WD (день недели), WE (выходные) для справки ...

ClientType  Column2     Column 3
Private     BH 06:00    £22.00
Private     BH 09:00    £25.00
Private     BH 17:00    £25.00
Private     WD 06:00    £12.00
Private     WD 09:00    £14.00
Private     WD 17:00    £14.00
Private     WE 06:00    £16.00
Private     WE 09:00    £16.00
Private     WE 17:00    £16.00
Family      BH 06:00    £28.00
Family      BH 09:00    £28.00
Family      BH 17:00    £28.00
Family      WD 06:00    £12.00
Family      WD 09:00    £12.00
Family      WD 17:00    £12.00
Family      WE 06:00    £15.00
Family      WE 09:00    £15.00
Family      WE 17:00    £15.00

Таким образом, пытаясь вернуть вышеуказанные данные как,

ClientType  Column2     Column 3
Private     BH 06:00    £22.00
Private     BH 09:00    £25.00
Private     WD 06:00    £12.00
Private     WD 09:00    £14.00
Private     WE 06:00    £16.00
Family      BH 06:00    £28.00
Family      WD 06:00    £12.00
Family      WE 06:00    £15.00

Возвращаются только результаты, если скорость изменяется во временной последовательности.

В дополнение к этому, если результаты возвращают только один из каждого временного диапазона, например клиента семейного типа, то он будет переименовывать временный диапазон только в BH, WD & WE. Например

ClientType  Column2     Column 3
Private     BH 06:00    £22.00
Private     BH 09:00    £25.00
Private     WD 06:00    £12.00
Private     WD 09:00    £14.00
Private     WE          £16.00
Family      BH          £28.00
Family      WD          £12.00
Family      WE          £15.00

Спасибо

1 Ответ

0 голосов
/ 15 марта 2019

Я думаю, что вы можете делать то, что вы хотите с lag():

select clienttype, column2, column3
from (select t.*,
             lag(column3) over (partition by clienttype, left(column2, 2) order by column2) as prev_column3
      from t
     ) t
where prev_column3 is null or prev_column3 <> column3;
...