如何显示去年的年初至今同期

时间:2016-07-06 19:22:19

标签: sql sql-server-2008 date

我有这个查询显示我从2016年和2015年同月的相同时段,

但我需要展示YTD

Ene,feb,mar,apr,may,jun,截至2015年7月6日和2016年同期(因为今天是第6天,明天是7月7日和7月8日等等)意思是类似于代码我有但不是只显示当前月份我需要年初至今。

if [ $# -ne 5 -a $# -ne 6 ]; then
    echo "yes"
fi

2 个答案:

答案 0 :(得分:2)

添加OR语句以涵盖此内容:

OR MONTH(OrderDate) <= MONTH(GETDATE())

SELECT OrderStatus, Sum_SellPrice, Sum_SellerMargin, Sum_BuyPrice, OrderDate
FROM   Sum_OrderCharges
WHERE  OrderStatus IN ('Completed', 'Invoiced', 'Open') 
AND OrderPeriodYear IN ('2015','2016')
AND ( (MONTH(OrderDate) = MONTH(GETDATE()) AND day(OrderDate) <= DAY(GETDATE()))
    OR MONTH(OrderDate) <= MONTH(GETDATE())  )--Be sure to wrap the entire OR segment with ()
ORDER BY OrderDate

答案 1 :(得分:0)

使用CTE准备和使用日期窗口更为优雅。这是一个例子。

declare @start as date='2016-01-01', @end date=getdate(),@depth int = 2

;with dates as (--prepare date ranges
--anchor query
select @start startDate, @end endDate, 1 cnt
union all
--recursive query 
select dateadd(year,-1,startDate),dateadd(year,-1,endDate), cnt+1
from dates where cnt < @depth
)
select d.startDate,d.endDate, 
OrderStatus, Sum_SellPrice, Sum_SellerMargin, Sum_BuyPrice --aggregate if necessary
from Sum_OrderCharges o
inner join dates d on o.OrderDate between d.startDate and d.endDate
WHERE (OrderStatus IN ('Completed', 'Invoiced', 'Open')) 

这样您甚至可以比较日期范围,例如2015-11-01至2016-07-05和2014-11-01至2015-07-05。