У меня есть набор данных, как показано ниже. Я хочу проверить последовательно значения строки в столбце L / P.
В качестве примера для tradedate
между 2019-02-12 и 2019-02-14 L / P возвращаемые значения были 1 0 0. для того же шаблона были записи для tradedate
между 2019-02-16 и 2019-02-18.
Как проверить этот же шаблон в столбце L / P, используя SQL Сервер?
tradedate price lost / profit L/P
---------- ----- ------------ ----
2019-02-11 150.00 0.00 1
2019-02-12 330.00 180.00 1
2019-02-13 329.00 -1.00 0
2019-02-14 151.00 -178.00 0
2019-02-15 148.00 -3.00 0
2019-02-16 329.00 181.00 1
2019-02-17 326.00 -3.00 0
2019-02-18 146.00 -180.00 0
Оператор DDL для создания таблицы
CREATE TABLE dbo.Ticker
(
symbol VARCHAR(10) NOT NULL,
tradedate DATE NOT NULL,
price NUMERIC(12, 2) NOT NULL,
CONSTRAINT PK_Ticker
PRIMARY KEY (symbol, tradedate)
);
GO
INSERT INTO dbo.Ticker(symbol, tradedate, price)
VALUES
('STOCK1', '20190211', 150.00),
('STOCK1', '20190212', 330.00),
('STOCK1', '20190213', 329.00),
('STOCK1', '20190214', 151.00),
('STOCK1', '20190215', 148.00),
('STOCK1', '20190216', 329.00),
('STOCK1', '20190217', 326.00),
('STOCK1', '20190218', 146.00);
SQL запрос на получение вышеуказанного набора данных
SELECT
tradedate,
price,
((LAG(price, 1, price) OVER (ORDER BY tradedate)) - price) * -1 AS 'lost / profit',
CASE WHEN ((LAG(price, 1, 0) OVER (ORDER BY tradedate)) - price) < 0 THEN 1 ELSE 0 END AS 'L / P'
FROM
Ticker t
WHERE
tradedate BETWEEN '2019-02-11' AND '2019-02-18'
````