【问题标题】:T-SQL Get Counter for # of Open Quotes in Date RangeT-SQL 获取日期范围内未决报价数的计数器
【发布时间】:2017-07-01 12:18:34
【问题描述】:

我试图弄清楚每个月/年有多少“公开报价”,但不知道如何自动执行此操作。我不想手动输入时间范围来执行此操作并寻求帮助。

我在此处上传了一个示例 CSV 文件和数据: https://drive.google.com/open?id=0B4xdnV0LFZI1N1kwbFUtOUpMa2c

表格的前两行如下所示:

tbl_QuoteWin

Quote_No    Add_Date    Update_Date     Quote_Status
5           05-Aug-15       10-15-Oct           Win
6           17-Sep-15       18-15-Nov           Win

tbl_QuoteOpen

Quote_No    Add_Date      Update_Date        Quote_Status
1           08-Aug-15                               Open
3           07-Sep-15                               Open

tbl_QuoteLoss

Quote_No    Add_Date         Update_Date     Quote_Status
2           07-Aug-15         17-Oct-15             Loss
4           25-Sep-15         7-Nov-15              Loss

所需的输出是我将一个月内赢得的报价数除以一个月内打开的报价数的一种方法。我不知道如何捕捉 'Add_Date_Month' 和 'Update_Date_Month' 之间的月份。

例如,在 tbl_QuoteWin 中,报价 #2 应计入 2015 年 8 月和 2015 年 9 月的“未结”报价计数,因为该报价在被置于“赢”状态之前处于“未结”状态2015 年 10 月。

我最初试图只提取月/年,然后认为我可以用它做点什么,但我真的不知道如何解决这个问题。即使我做了 DATEDIFF() 我也会得到一段时间,而不是实际的月份。

我希望这是有道理的,并提前感谢您帮助我或至少为我指明了正确的方向。

谢谢!

【问题讨论】:

  • 您的日期列是存储为日期还是字符串?
  • 我不确定流程。在您的数据中,引用 #2 在更新 15.oct 中既输又赢?
  • 您是要统计特定月份开盘的报价数量,还是该月开盘的总报价?如果一个报价在一个月内输赢,是否应该算作当月的未平仓报价?也许如果您可以在问题中添加所需的输出,这可能有助于理解
  • @SørenKongstad,更正了样本数据。我想要每个月的未平仓报价总数。如果报价在一个月内关闭(赢/输),则不应将其视为该月的“未平仓”。因此,如果报价在 2015 年 1 月开盘并在 2015 年 6 月赢得,在历史数据中,它应在 1 月、2 月、3 月、4 月、5 月计为“开盘”,在 6 月计为“赢盘”。这有帮助吗?

标签: sql-server tsql datetime date-range


【解决方案1】:
SELECT MONTH(Add_Date),YEAR(Add_Date), COUNT(*)
FROM tbl_QUOTEOpen 
GROUP BY MONTH(Add_Date),YEAR(Add_Date)

此解决方案是可行的,因为只有处于未结状态的报价才会出现在未结报价表中。一旦他们赢了或输了,他们就会转移到另一张桌子。 根据您问题中的表格,结果将是

8  2015 1
9  2015 1

【讨论】:

    猜你喜欢
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2012-10-22
    • 2021-12-23
    相关资源
    最近更新 更多