Knocks/BackEnd/Knoks.Operate/Stored Procedures/BO_GetKnokChartData.sql

66 lines
2.3 KiB
Transact-SQL

CREATE PROCEDURE [BO_GetKnokChartData]
@KnokId BIGINT = NULL,
@ShowEndedOnly BIT = NULL,
@RangeSettings [DurationCRTAggrItemsList] readonly
AS
IF ISNULL(@ShowEndedOnly, 0) = 0
BEGIN
SELECT T.* FROM (
--Get rates for the active knoks
SELECT k.KnokId as KnokId, CAST(CRT.Rate AS decimal(22, 8)) as Y, CRT.CRTD_Period as X
FROM [dbo].[VW_ActiveKnoks] k
CROSS APPLY GetAppropriateCRTDataRange(k.Duration, k.Currency1, k.Currency2, k.ExchangeId, @RangeSettings) CRT
WHERE
ISNULL(@KnokId, k.KnokId) = k.KnokId
AND CRT.CRTD_Period >= k.CreateDate AND CRT.CRTD_Period <= DATEADD(day, k.Duration, k.CreateDate)
UNION ALL
--Get rate for the start date of the knok
SELECT k.KnokId as KnokId,
(SELECT TOP 1 CAST(MAX(CRT.Rate) AS decimal(22, 8)) as Y
FROM [dbo].[Signals] k1
CROSS APPLY GetAppropriateCRTDataRange(k1.Duration, k1.Currency1, k1.Currency2, k1.ExchangeId, @RangeSettings) CRT
WHERE k.KnokId = k1.KnokId AND CRT.CRTD_Period <= k1.CreateDate
GROUP BY k1.KnokId, k1.CreateDate, CRT.CRTD_Period
ORDER BY CRT.CRTD_Period DESC),
k.CreateDate as X
FROM [dbo].[Signals] k
WHERE ISNULL(@KnokId, k.KnokId) = k.KnokId
UNION ALL
--Get rate for the current date
SELECT k.KnokId as KnokId,
(SELECT TOP 1 CAST(CRT.CRTD_BidClosingValue AS decimal(22, 8))
FROM [Knoks_Prices].[dbo].[CRT_Data_LiveChart] CRT
WHERE CRT.CRTD_PairSymbol = k.Currency1 + k.Currency2 AND CRT.ExchangeId = k.ExchangeId
AND CRT.CRTD_CreationDate <= GETUTCDATE()
--GROUP BY k.SignalId, k.CreateDate --, CRT.CRTD_Period
ORDER BY CRT.CRTD_CreationDate DESC) as Y,
GETUTCDATE() as X
FROM [dbo].[Signals] k
WHERE ISNULL(@KnokId, k.KnokId) = k.KnokId) T
ORDER BY T.X
END
ELSE
BEGIN
SELECT T.* FROM (
--Get rates for the ended knoks
SELECT k.KnokId as KnokId, CAST(CRT.Rate AS decimal(22, 8)) as Y, CRT.CRTD_Period as X
FROM [dbo].[VW_EndedKnoks] k
CROSS APPLY GetAppropriateCRTDataRange(k.Duration, k.Currency1, k.Currency2, k.ExchangeId, @RangeSettings) CRT
WHERE
ISNULL(@KnokId, k.KnokId) = k.KnokId
AND CRT.CRTD_Period >= k.CreateDate AND CRT.CRTD_Period <= k.CloseDate
UNION ALL
SELECT k.KnokId as KnokId, CAST(k.CloseRate AS decimal(22, 8)) as Y, k.CloseDate as X
FROM [dbo].[VW_EndedKnoks] k
WHERE
ISNULL(@KnokId, k.KnokId) = k.KnokId AND NOT k.CloseDate IS NULL) T
ORDER BY T.X
END
RETURN 0