2017-06-05 11 views
0

ユーザーが選択した年のデータを4月の次の年に表示したいとします(例:ユーザーが2017を選択した後、2017年から4月にデータを選択する必要がある2018)。それをフィルタリングするための最良のクエリは何ですか?選択した年からのオーダーである必要があります。年と月の特定の範囲のデータをフィルタリングする選択クエリ

SELECT DATEPART(mm,submitted_date),SUM(total_count),YEAR(submitted_date) 
FROM store_details 
WHERE YEAR(submitted_date) = '2017' 
AND MONTH(submitted_date) >=3 
Group By YEAR(submitted_date),DATEPART(mm,submitted_date) 
Order By YEAR(submitted_date),DATEPART(mm,submitted_date) 

答えて

0

さて、SQL Serverのそれ以降のバージョン(2012+)にはdatefrompartsという素晴らしい組み込み関数があります。しかし、あなたの質問にというタグが付いているので、データベースをアップグレードできない限り、これはあまり役に立ちません(2005年はMicrosoftからサポートされていないため、実際に考える必要があります)。

あなたは3月と来年の4月の間のすべてのデータが欲しい知っているので、あなたは、単にこれを行うことができます:

SELECT DATEPART(MONTH,submitted_date),SUM(total_count),YEAR(submitted_date) 
FROM store_details 
WHERE submitted_date >= CAST(CAST(@Year as char(4)) + '-03-01 00:00:00' As datetime) 
WHERE submitted_date < CAST(CAST(@Year + 1 as char(4)) + '-04-01 00:00:00' As datetime) 

Group By YEAR(submitted_date),DATEPART(MONTH,submitted_date) 
Order By YEAR(submitted_date),DATEPART(MONTH,submitted_date) 

(つまり、ユーザは、int型の値として毎年提供と仮定すると、です。 )

+0

は、 'CAST'の近くに誤った構文を示しています。予想通り 'AS'です。@年がパラメトリッククエリで2017として渡されています – user2431727

+0

括弧をあまりにも早く閉じました。今すぐやってみて下さい。 –

+0

Where with And inの答えを修正してください。 CAST(CAST(@Year as char(4))+ '-03-01 00:00:00'); AND submitted_date '-04-01 00:00:00'としてdatetime) – user2431727

0

すでに手に開始月と日付を持っている場合あなたは自分のWHERE句で日付に上限を追加することができない理由は、私は表示されません。

SELECT 
    DATEPART(mm, submitted_date), 
    SUM(total_count), 
    YEAR(submitted_date) 
FROM store_details 
WHERE 
    (YEAR(submitted_date) = '2017' AND MONTH(submitted_date) >= 3) AND 
    (YEAR(submitted_date) = '2018' AND MONTH(submitted_date) < 4) 
GROUP BY 
    YEAR(submitted_date), 
    DATEPART(mm, submitted_date) 
ORDER BY 
    YEAR(submitted_date), 
    DATEPART(mm, submitted_date) 
関連する問題