【问题标题】:How to show data from this month same month last year same period SQL Server 2008如何显示本月同月去年同期SQL Server 2008的数据
【发布时间】:2016-11-07 20:13:36
【问题描述】:

我一直在努力完成这项工作。我想在过去的日子里显示最新的数据我想显示去年同月的同一天

Jul 7 2016     
Jul 6 2016    
Jul 5 2016    
Jul 4 2016    
Jul 3 2016     
Jul 2 2016    
Jul 1 2016  

Jul 7 2015     
Jul 6 2015    
Jul 5 2015    
Jul 4 2015    
Jul 3 2015     
Jul 2 2015    
Jul 1 2015

这是我的代码:现在显示所有 2015 年的记录,我希望它像上面一样显示为最新的。

SELECT        
    OrderStatus, Sum_SellPrice, Sum_SellerMargin, Sum_BuyPrice, 
    OrderPeriodMonthName, OrderDate
FROM
    Sum_OrderCharges
WHERE        
    (OrderStatus IN ('Completed', 'Invoiced', 'Open')) 
    AND (OrderPeriodYear IN ('2016','2015')) 
    AND (MONTH(OrderDate) = MONTH(GETDATE()))
ORDER BY 
    OrderDate

【问题讨论】:

  • 你的代码应该显示你想要的。您能否告诉我们您当前的查询返回了什么?
  • 抱歉让我删除如果错误的行的代码
  • @matt 我删除了错误的行,是的,我的意图是保留相同的限制
  • 现在只需将 @happycoding 的 e AND (OrderDate
  • @matt 仍在向我展示整个 2015 年 7 月我想要做什么,我显示的天数与 2016 年相同,这意味着它现在应该显示 2016 年 7 月 1 日到 5 日和 2015 年 7 月 5 日

标签: sql sql-server-2008 data-manipulation


【解决方案1】:

我相信您会将以下内容附加到 where 子句: AND (OrderDate <= GETDATE())

完全是这样的:

SELECT        OrderStatus, Sum_SellPrice, Sum_SellerMargin, Sum_BuyPrice, OrderPeriodMonthName, OrderDate
FROM            Sum_OrderCharges 
WHERE        (OrderStatus IN ('Completed', 'Invoiced', 'Open')) AND (OrderPeriodYear IN ('2016','2015')) AND (MONTH(OrderDate) = MONTH(GETDATE())) 
ORDER BY OrderDate

不需要:我会将其格式化如下,以便您更好地了解您在 where 子句中所做的一切。 (更容易看到你所有的左括号和右括号)

SELECT        OrderStatus
              ,Sum_SellPrice
              ,Sum_SellerMargin
              ,Sum_BuyPrice
              ,OrderPeriodMonthName
              ,OrderDate
FROM          Sum_OrderCharges 
WHERE         (OrderStatus IN ('Completed', 'Invoiced', 'Open'))
              AND (OrderPeriodYear IN ('2016','2015'))
              AND (MONTH(OrderDate) = MONTH(GETDATE()))
              AND (OrderDate <= GETDATE()) 
ORDER BY      OrderDate

【讨论】:

  • 你好@happy 编码,我正在做类似的事情,但我没有做内部连接,而是包含另一个不正确的选择,请问我应该在“date2”中输入什么
【解决方案2】:
SELECT        OrderStatus, Sum_SellPrice, Sum_SellerMargin, Sum_BuyPrice, OrderPeriodMonthName, OrderDate
FROM            Sum_OrderCharges
WHERE        (OrderStatus IN ('Completed', 'Invoiced', 'Open')) AND (OrderPeriodYear IN ('2016','2015')) AND (MONTH(OrderDate) = MONTH(GETDATE()))

       AND DAY(OrderDate) <= DAY(GETDATE())

ORDER BY OrderDate

注意DAY() 将返回一个介于 1 和 31 之间的整数,而不是实际日期,因此您可以使用它来比较并将结果进一步限制为实际发生的日期。

【讨论】:

  • 感谢马特,这正是我所需要的,我是如此简单,只是那条线成就了我的下午。哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多