【问题标题】:date issue due to datediff function in between由于 datediff 函数介于两者之间的日期问题
【发布时间】:2013-04-17 14:20:13
【问题描述】:

我有以下查询:

SELECT   
  datediff(d, 0, sauda_date),
  Scrip_Code,
  SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty   ELSE 0 END) AS BuyQty, 
  SUM(CASE WHEN Buy_sell = 1 THEN Market_Rate ELSE 0 END) AS BuyRate, 
  SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty * Market_Rate ELSE 0 END) AS BuyAmount,
  SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty ELSE 0 END) AS SellQty, 
  SUM(CASE WHEN Buy_sell = 2 THEN Market_Rate ELSE 0 END) AS SellRate,
  (CASE WHEN SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty ELSE 0 END) >
             SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty ELSE 0 END) THEN 'BF' 
      ELSE 'BT' END ) as TradeType, 
  SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty * Market_Rate ELSE 0 END) AS SellAmount, 
  SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty ELSE 0 END) - 
  SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty ELSE 0 END) as NETQTY,
  SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty * Market_Rate ELSE 0 END) - 
  SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty * Market_Rate ELSE 0 END)as NetAmt,
  SUM(CASE WHEN Buy_sell = 2 THEN Trade_Qty * Market_Rate ELSE 0 END) - 
  SUM(CASE WHEN Buy_sell = 1 THEN Trade_Qty * Market_Rate ELSE 0 END) as PNLAmt 
FROM tradeFile 
where Inst_Type = 'FUTIDX' 
   OR Inst_Type='FUTSTK' 
  and Sauda_Date = convert(datetime,'1 Mar 2013') 
group by Scrip_Code, ExpiryDate, datediff(d,0,sauda_date)

结果:

此查询用于按日期计算 Buy_Qty,Sell_Qty 的总和。[引用此任务:not able to get individual date in query result

但是我们可以看到 datediff(d,0,sauda_date) 列(即第一列)给了我一些结果,但我想在这个结果中也添加 sauda_date 作为日期。

我应该在这个查询中做些什么改变。

我通过在查询中直接添加 sauda_date 进行了尝试,但它给了我错误。

请指导我。

【问题讨论】:

    标签: sql database sql-server-2005 join


    【解决方案1】:

    不确定您的结果要求..

    如果您按列表分组,只需在选择列表中添加 sauda_date 不会出错,我已经尝试过 belwo 及其工作。

    Select datediff(d,0,f.Date), 
           sum(f.price), 
          f.OrderID,
           f.Date
    from test f
    group by f.Date,OrderID,datediff(d,0,f.Date)
    

    其他 您可以使用 self join 在您的键列上仅获取 sauda 日期加入主要结果

    【讨论】:

      【解决方案2】:

      如果您在查询中使用 GROUP BY,那么(在 T-SQL 的情况下)在查询的字段部分中,您只能使用来自 GROUP BY 的字段或聚合函数(SUM、COUNT、 ....)。所以你不能只添加sauda_date。您应该使用聚合函数添加它。例如MIN(sauda_date)。或者您可以将其添加到 GROUP BY 部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-23
        相关资源
        最近更新 更多