2016-09-06 8 views
0

を比較:現在の年(前週) - EG-週に31SQLは - マシンから現在の日付を選択し、以下のクエリ シナリオ1の場合は

sum(case when s.Date between '2016-07-17' and '2016-07-23' then s.SELLINC else 0 end) ActualSales 

シナリオ2:昨年(前週) - の場合EG-週31

sum(case when s.Date between '2015-07-19' and '2015-07-25' then s.SELLINC else 0 end) LastYrVarianc 

シナリオ3:今日の日付までに現在の年の初めの間に日付をピッキング

sum(case when s.Date between '2016-01-01' and '2016-09-05' then s.SELLINC else 0 end) YrToDateActual 

シナリオ4:昨年の今日の日付

sum(case when s.Date between '2015-01-01' AND '2015-09-05' then s.SELLINC else 0 end) LastYrToDateActual 

代わりのハード日付をコーディングまで、昨年の初めの間にピッキング日付。私はマシンから現在の日付を選択して比較したいと思います。

週は、日曜日から始まり、土曜日が終わります。助けてください?

+1

現在の年の終了を取得するには、DATEFROMPARTS(YEAR(GETDATE())、12,31)を使用します。 – PacoDePaco

答えて

2

まず第一に、GETDATE()は、今日の日付のSQL Serverの機能である

DATEADD(..)日付

1) case when s.date between DATEADD(dd,-6,getdate()) and getdate()) then... 

2) case when s.date between DATEADD(yy,-1,DATEADD(dd,-6,getdate())) and DATEADD(yy,-1,getdate()) then ... 

3) case when s.date between DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) and getdate() then ... 

4) case when s.date between dateadd(yy,-1,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) and DATEADD(yy,-1,GETDATE()) then .. 

here

0
から少し助けをものを追加する機能です

使用日演算

declare @weekNo int = 31; 
--start of the year 
declare @ys datetime = dateadd(year,datediff(year,0,getdate()),0) 
-- start of the first week of the year (may start in December of prev year) 
declare @y1ws datetime = dateadd(week,datediff(week,0,@ys),0) 

select @ys, @y1ws, dateadd(week, @weekNo-1, @y1ws) [week31 start], dateadd(week, @weekNo, @y1ws) [week32 start] 
-- use it this way for week 31 
-- .. where somedate >= [week31 start] and somedate < [week32 start] 
1

あなたの週の駅sundayからsaturdayへのrts。あなたはこのクエリを使用することができます

シナリオ-1(PreviousWeekStartDateとPreviousWeekEndDate)

s.Date between convert(date,dateadd(wk, datediff(wk, 0, getdate()) - 1, 0) - 1) and convert(date,dateadd(wk, datediff(wk, 0, getdate()) - 1, 0) + 5) 

シナリオ-2(LastYearPreviousWeekStartDateとLastYearPreviousWeekEndDate)

s.Date between convert(date,dateadd(wk, datediff(wk, 0, dateadd(YEAR, - 1, getdate())) - 1, 0) - 1) and convert(date,dateadd(wk, datediff(wk, 0, dateadd(YEAR, - 1, getdate())) - 1, 0) + 5) 

シナリオ-3(StartOfYearと現在の日付)

s.Date between convert(date,DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0)) and convert(date,getdate()) 

シナリオ-4(StartOfLastYearとCurrentDateLastYear)

s.Date between convert(date,DATEADD(yy, DATEDIFF(yy, 0, dateadd(YEAR, - 1, getdate())), 0)) and convert(date,dateadd(YEAR, - 1, getdate())) 
0
SELECT 
    GETDATE(),           -- Today 
    DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0),  -- Start of this year 
    DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) - 1, 0), -- Start of last year 
    DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0),  -- Start of this week 
    DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()) - 1, 0) -- Start of last week 
0

私はDATEPART (Transact-SQL)を使用すると、よりポータブルソリューションだと思います。シナリオ1とシナリオ2の回答は、JohnHCの回答とは異なる日曜日から始まる自然な週を参照しています(過去7日間を参照)。

-- 
-- Scenario 1: Current Year (Previous Week) - For eg- Week 31 
-- 
CASE WHEN 
    DATEPART(ww, s.Date) = DATEPART(ww, GETDATE()) - 1 AND 
    DATEPART(yy, s.Date) = DATEPART(yy, GETDATE()) 
THEN ... 

-- 
-- Scenario 2: Last Year (Previous Week) - For eg- Week 31 
-- 
CASE WHEN 
    DATEPART(ww, s.Date) = DATEPART(ww, GETDATE()) - 1 AND 
    DATEPART(yy, s.Date) = DATEPART(yy, GETDATE()) - 1 
THEN ... 

-- 
-- Scenario 3: Picking dates between beginning of current year till today's date 
-- 
CASE WHEN 
    DATEPART(yy, s.Date) = DATEPART(yy, GETDATE()) 
THEN ... 

-- 
-- Scenario 4: Picking dates between beginning of last year till last year today's date 
-- 
CASE WHEN 
    DATEPART(yy, s.Date) >= DATEPART(yy, GETDATE()) - 1 
THEN ... 
関連する問題