Sql server 用于计算连续几天最大损失的sql查询

Sql server 用于计算连续几天最大损失的sql查询,sql-server,Sql Server,我的股票市场数据保存在sql server数据库中,用于记录我的历史交易。这是表格结构 表列 交易日期 股票名称 数量 入口价格 出口许可证 利润损失 我想知道的是我连续N天以失败告终。或者换言之,是我遇到过的最大损失序列。我有四年的数据。 我有一个sql,它给了我每天的利润损失,但它的数据太多,无法找到连续亏损的日子。在下面共享该sql select tradedate, sum(profitloss) as profitloss from calls wher

我的股票市场数据保存在sql server数据库中,用于记录我的历史交易。这是表格结构

表列

  • 交易日期
  • 股票名称
  • 数量
  • 入口价格
  • 出口许可证
  • 利润损失
我想知道的是我连续N天以失败告终。或者换言之,是我遇到过的最大损失序列。我有四年的数据。 我有一个sql,它给了我每天的利润损失,但它的数据太多,无法找到连续亏损的日子。在下面共享该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  
请试试这个

select tradedate, sum(profitloss) as profitloss 
from calls 
where 
group by TradeDate 
having sum(profitloss) < 0
order by tradedate desc
选择tradedate,sum(profitloss)作为profitloss
来自电话
哪里
按交易日期分组
总和(利润损失)<0
按交易日期说明订购
请试试这个

select tradedate, sum(profitloss) as profitloss 
from calls 
where 
group by TradeDate 
having sum(profitloss) < 0
order by tradedate desc
选择tradedate,sum(profitloss)作为profitloss
来自电话
哪里
按交易日期分组
总和(利润损失)<0
按交易日期说明订购

我无法访问测试数据或您喜欢的SQL,但这个粗略的想法应该适合您。使其适合您的数据和SQL方言

使用
当(sum(profitloss)over(1个前一行和1个前一行之间的行)*sum(profitloss)over(当前_行和当前_行之间的行))大于0时,则0否则1以符号_change_标记结束

然后
count(*)over(当sign\u change\u marker=1时,从当前行到以下未绑定重置的行)
来计算从每个日期开始的赢或输的连胜长度

我无法访问测试数据或您的SQL风格,但这个粗略的想法应该适合您。使其适合您的数据和SQL方言

使用
当(sum(profitloss)over(1个前一行和1个前一行之间的行)*sum(profitloss)over(当前_行和当前_行之间的行))大于0时,则0否则1以符号_change_标记结束

然后,
count(*)覆盖(当sign\u change\u marker=1时,从当前行到以下未绑定重置的行)
以计算从每个日期开始的赢或输的连胜长度

mysql或sql server?请标记正确的RDBMS(产品和版本)ProfitLoss列的数据是什么?你能提供一些样本数据和期望的输出吗?另外,最好提供示例数据DDL和DML语句,以便回答您问题的人能够实际测试答案。您好,我们如何获得损益值?是-ve是亏损吗?是的。盈利时亏损是数字+ve,亏损时亏损是-ve数字看起来像是缺口和孤岛。mysql还是sql server?请标记正确的RDBMS(产品和版本)ProfitLoss列的数据是什么?你能提供一些样本数据和期望的输出吗?另外,最好提供示例数据DDL和DML语句,以便回答您问题的人能够实际测试答案。您好,我们如何获得损益值?是-ve是亏损吗?是的。盈利时亏损是数字+ve,亏损时亏损是-ve。这看起来像是缺口和孤岛问题。