powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос для создания ордера на бирже
4 сообщений из 4, страница 1 из 1
Запрос для создания ордера на бирже
    #40094975
MathewSun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет)
Делаем биржу.
Решили сделать стакан пары из 2х таблиц - OpenOrders и ClosedOrders (сюда переносятся завершенные ордера)
Структура OpenOrders: [Id],[CreateDate],[IsBuy],[Price],[Amount],[Total],[CreateUserId]
Ордера есть на покупку (IsBuy=0) и на продажу (IsBuy=1)
Пытаемся сделать максимально эффективный запрос в процедуре, который будет закрывать, открывать и переносить ордера в зависимости от логики.

На входе приходит запрос на ордер (проверку на баланс и списание делаем ранее) - цена сделки (Price) и количество (Amount)

Помогите правильно написать саму процедуру, не понимаю как правильно результат выборки класть в переменную и потом с ним в процедуре работать:

Делаю выборку:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare @orderPrice decimal(38,20);
set @orderPrice = 46977

declare @IsBuy bit;
set @IsBuy = 0;

select top 1 
*
from BTC_USDT_OpenOrders 
where (@IsBuy = 0
and IsBuy = @IsBuy
and Price <= @orderPrice
)
or
(@IsBuy = 1
and IsBuy = @IsBuy
and Price >= @orderPrice
)
order by Price, CreateDate



потом надо проверить:
1) если выборка пустая - то создать новый ордер
2) если не пустая - то сравниваем Amount выбранного ордера с пришедшим значением:
а) если Amount выбранного ордера меньше - то удалить эту запись из OpenOrders и перенести в ClosedOrders и вернуть на бекенд значение Amount
б) если Amount выбранного ордера больше - то уменьшить это значение Amount на пришедшее количество, добавить в ClosedOrders пришедший ордер и вернуть на бекенд статус что пришедший ордер выполнился.

Основной вопрос - как положить результат выборки select top 1 * в переменную и дальше построить условия ветвления алгоритма?
Спасибо!
...
Рейтинг: 0 / 0
Запрос для создания ордера на бирже
    #40094991
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MathewSun
Основной вопрос - как положить результат выборки select top 1 * в переменную и дальше построить условия ветвления алгоритма?

выборку (несколько полей) в переменную "положить" нельзя
можно каждое (нужные) поле (поля) "положить"

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
declare @Id int;
declare @Amount decimal(38,20);

select top 1 
  @Id = Id
  ,@Amount = Amount
from BTC_USDT_OpenOrders 
where (@IsBuy = 0
and IsBuy = @IsBuy
and Price <= @orderPrice
)
or
(@IsBuy = 1
and IsBuy = @IsBuy
and Price >= @orderPrice
)
order by Price, CreateDate;

if @Amount is null 
  -- 1) если выборка пустая - то создать новый ордер
else if @Amount < @orderPrice
  -- 2) а) если Amount выбранного ордера меньше
else
  -- 2) б) если Amount выбранного ордера больше 
...
Рейтинг: 0 / 0
Запрос для создания ордера на бирже
    #40094995
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court
выборку (несколько полей) в переменную "положить" нельзя


Табличные переменные
...
Рейтинг: 0 / 0
Запрос для создания ордера на бирже
    #40095096
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно использовать временную таблицу, select .. into #tbl
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос для создания ордера на бирже
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]