2016-03-16 102 views
1

我有我的歷史交易的SQL服務器數據庫中的股票市場數據。下面是表結構SQL查詢來計算連續連續幾天的最大損失

表列

  • TradeDate
  • StockName
  • 數量
  • EntryPrice
  • ExitPrice
  • ProfitLoss

我想知道的是連續N天的損失。或者換句話說,我曾經遇到過最大的失序。我有4年的數據。 我有一個SQL,它給了我每天的利潤損失,但它的數據太多,無法找到連續失敗的日子。下面分享

select tradedate, sum(profitloss) as profitloss 
    from calls 
    where 
    group by TradeDate 
    order by ProfitLoss 


    --Create table 
    CREATE TABLE [dbo].[Calls]( 
     [CallDate] [datetime] NOT NULL, 
     [StockName] [varchar](500) NOT NULL, 
     [Quantity] [int] NOT NULL, 
     [EntryPrice] [float] NOT NULL, 
     [ExitPrice] [float] NOT NULL, 
     [ProfitLoss] [float] NOT NULL 
    ) ON [PRIMARY] 


--Sample Data for a day 
TradeDate    StockName  Profitloss 
2012-10-05 09:19:00.000 HINDALCO -999.6 
2012-10-05 09:19:00.000 CIPLA -999.6 
2012-10-05 09:19:00.000 BPCL -999 
2012-10-05 09:19:00.000 BANKBARODA 3256.25 
2012-10-05 09:19:00.000 TATASTEEL 3493.5 
2012-10-05 09:19:00.000 AMBUJACEM 6230.36 
2012-10-05 09:19:00.000 JINDALSTEL 7953.01 
+0

MySQL或SQL服務器前進的連勝長度是多少?請標記正確的RDBMS(產品和版本) – Shnugo

+3

ProfitLoss列的數據是什麼?你能提供一些樣本數據和期望的輸出嗎?此外,最好提供示例數據DDL和DML語句,以便回答您問題的人員可以真正測試該答案。 –

+0

嗨,我們怎麼能得到的價值是利潤還是虧損?是 - 是損失? –

回答

0

該SQL請試試這個

select tradedate, sum(profitloss) as profitloss 
from calls 
where 
group by TradeDate 
having sum(profitloss) < 0 
order by tradedate desc 
0

我沒有獲得測試數據或您的SQL的味道,但這個粗略的想法應該爲你工作。適合你的數據和SQL方言。

使用 case when (sum(profitloss) over (rows between 1 preceding and 1 preceding) * sum(profitloss) over (rows between current_row and current_row)) > 0 then 0 else 1 end as sign_change_marker 然後count(*) over (rows from current row to following unbound reset when sign_change_marker = 1)計算輸贏從每個日期