Выбор отличного значения на указанную дату - PullRequest
0 голосов
/ 13 января 2020

Это мой самый первый пост на stackoverflow:)

Я хотел бы попросить вас помочь с моим запросом. Я хотел бы иметь только отдельное значение в col1 (SetDate), для дублированных значений я хотел бы взять значение с более высокой датой в столбце 2 (QuoDate). Например, для SetDate = 2020-01-08 я хотел бы показать только QuoDate = 2020-01-06 и MidPrice = 4.2422.

SetDate     QuoDate     MidPrice
2019-12-30  2019-12-24  4.2539
2019-12-30  2019-12-26  4.257
2019-12-31  2019-12-27  4.2627
2020-01-02  2019-12-30  4.2602
2020-01-03  2019-12-31  4.2531
2020-01-07  2020-01-02  4.2513
2020-01-08  2020-01-03  4.2443
2020-01-08  2020-01-06  4.2422
2020-01-09  2020-01-07  4.2452
2020-01-10  2020-01-08  4.2389
2020-01-13  2020-01-09  4.2431
2020-01-14  2020-01-10  4.2408

Ответы [ 2 ]

1 голос
/ 14 января 2020

Вы можете использовать row_number (), чтобы понять, какая строка является последней в разделе SetDate:

select
 t.SetDate
,t.QuoDate
,t.MidPrice
from (
 select
  t.SetDate
 ,t.QuoDate
 ,t.MidPrice
 ,row_number() over (partition by t.SetDate order by t.QuoDate desc) as RN_SetDate
 from t_data t
) t
where t.RN_SetDate = 1
0 голосов
/ 13 января 2020

Я думаю, что вы можете делать то, что вы хотите, используя коррелированный подзапрос:

select t.*
from t
where t.quodate = (select max(t2.quodate)
                   from t t2
                   where t2.setdate = t.setdate
                  );

Для производительности вам нужен индекс на (setdate, quodate).

Здесь это дб <> скрипка.

...