SQL запрос в SQLite - страница 6

 
Yuriy Zaytsev #:

тогда можно сделать так , и все взлетит.

select
 T2.sess_id,
 T2.isin_id, 
 T2.short_isin,
 T2.isin, 
 T2.name
From table1  as T1
Left join table2   as T2
On T1.sess_id = T2.sess_id

where  T1.sess_id = (Select MAX( TmaxSess_id.sess_id ) from table1 as TmaxSess_id  )

Спасибо

У меня, пока, получается так

CREATE TABLE IF NON EXISTS futures AS

  SELECT (sess_id, isin_id, short_isin, isin, name)

  FROM forts_refdata_replfut_sess_contents

  [WHERE conditions];

Осталось составить условия (conditions)

 
prostotrader #:

Спасибо

У меня, пока, получается так

Осталось составить условиz (conditions)

тут вопрос

выборку нужно регулярно делать ?

один раз  в день ?

таблицу по идее можно создать один раз futures 

а вот данными ее наполнять по какому то событию - верно ?

 
Yuriy Zaytsev #:

тут вопрос

выборку нужно регулярно делать ?

один раз  в день ?

а вот данными ее наполнять по какому то событию - верно ?

Верно, но при загрузке программы обязательно делается 1 раз, чтобы составить списки инструментов,

торгуемых в текущую сессию

После клиртнга, нужно вновь обновить таблицу, потому что изменится sess_id

 
Yuriy Zaytsev #:

тогда можно сделать так , и все взлетит.

select
 T2.sess_id,
 T2.isin_id, 
 T2.short_isin,
 T2.isin, 
 T2.name
From table1  as T1
Left join table2   as T2
On T1.sess_id = T2.sess_id

where  T1.sess_id = (Select MAX( TmaxSess_id.sess_id ) from table1 as TmaxSess_id  )

скорее ORDER BY и LIMIT..чтобы не было вложенных запросов

сначала JOIN, то есть таблицы объединили (соотнесли строки со строками, породили новый набор), далее отсортировали по новому полю и взяли N первых (одну?) записей

 
Yuriy Zaytsev #:

тут вопрос

выборку нужно регулярно делать ?

один раз  в день ?

а вот данными ее наполнять по какому то событию - верно

Спасибо большое, все почти получилось, но значения почему-то не подставились


А сам запрос такой

create table if not exists futures as select
 T2.sess_id,
 T2.isin_id, 
 T2.short_isin,
 T2.isin, 
 T2.name
From FORTS_REFDATA_REPLsession as T1
Left join FORTS_REFDATA_REPLfut_sess_contents as T2
On T1.sess_id = T2.sess_id
where T1.sess_id = (Select MAX( TmaxSess_id.sess_id ) from FORTS_REFDATA_REPLsession as TmaxSess_id  )

И как сказать, что isin_id это будет primary key?

Так

create table if not exists futures as select
 T2.sess_id,
 T2.isin_id primary key, 
 T2.short_isin,
 T2.isin, 
 T2.name
From FORTS_REFDATA_REPLsession as T1
Left join FORTS_REFDATA_REPLfut_sess_contents as T2
On T1.sess_id = T2.sess_id
where T1.sess_id = (Select MAX( TmaxSess_id.sess_id ) from FORTS_REFDATA_REPLsession as TmaxSess_id  )
 
prostotrader #:


А сам запрос такой


в схеме, по хорошему это view (представление), а не таблица данных.

или вообще просто прикладной select

 
prostotrader #:

Спасибо большое, все почти получилось, но значения почему-то не подставились


А сам запрос такой

И как сказать, что isin_id это primary key?

Есть возможность не создавать таблицу  futures  ? по идее у вас есть две таблицы ,

FORTS_REFDATA_REPLsession  






FORTS_REFDATA_REPLfut_sess_contents

 которые судя по всему заполняются видимо из QUIK  такой запрос дает нужны результат ?  все поля видны ?

select
 T2.sess_id,
 T2.isin_id, 
 T2.short_isin,
 T2.isin, 
 T2.name
From FORTS_REFDATA_REPLsession as T1
Left join FORTS_REFDATA_REPLfut_sess_contents as T2
On T1.sess_id = T2.sess_id
where T1.sess_id = (Select MAX( TmaxSess_id.sess_id ) from FORTS_REFDATA_REPLsession as TmaxSess_id  )


т е можно просто  зачитать  данные полученые из запроса  - промежуточная таблица  futures   по идее не нужна.

если же таблица  futures  (  будет нести историческое значение, а не каждый день в каждую сессию  затираться и вновь создаваться)  

то ее лучше создать один раз - с полями такими же как в порождающих таблицах

 но опять же - она не нужна так как данные всегда можно получить из двух таблиц.

 
Maxim Kuznetsov #:

в схеме, по хорошему это view (представление), а не таблица данных.

или вообще просто прикладной select

вот вот - я об этом же

 
Yuriy Zaytsev #:

Есть возможность не создавать таблицу  futures  ? по идее у вас есть две таблицы ,

 которые судя по всему заполняются видимо из QUIK  такой запрос дает нужны результат ?  все поля видны ?


т е можно просто  зачитать  данные полученые из запроса  - промежуточная таблица  futures   по идее не нужна.

если же таблица  futures  (  будет нести историческое значение, а не каждый день в каждую сессию  затираться и вновь создаваться)  

то ее лучше создать один раз - с полями такими же как в порождающих таблицах

 но опять же - она не нужна так как данные всегда можно получить из двух таблиц.

Вы, скорее всего, правы, но

мне постоянно нужен актуальный список торгуемых инструментов, который может обновляться.

Думается, что нужно создать структуру, которая будет храниться отдельно от Базы, и которая (структура)

будет обновляться, при необходимости.

Но в любом случае, данные должны браться из 2-х таблиц

 
prostotrader #:

Вы, скорее всего, правы, но

мне постоянно нужен актуальный список торгуемых инструментов, который может обновляться.

Думается, что нужно создать структуру, которая будет храниться отдельно от Базы, и которая (структура)

будет обновляться, при необходимости.

Но в любом случае, данные должны браться из 2-х таблиц

Если так то лучше получать из запроса - особо акткутально если иструменты могут обновится.

особой разницы не будет - просто в п.2 возникнет промежуточная операция 

с учетом что в первичных таблицах данные могут обновится


п.1 получить данные из запроса и обработать их

п.2 получить данные из запроса , уложить их в промежуточныую таблицу  futures    , далее получить данные из таблицы  futures     и обработать их