2017-06-05 4 views
0

Je souhaite afficher les données de l'année sélectionnée de mars à avril de l'année suivante (ex: si l'utilisateur a sélectionné 2017, puis sélectionner les données de 2017 mars à avril 2018). Quelle est la meilleure requête pour le filtrer. Il devrait être commandé par année sélectionnée.Sélectionner une requête pour filtrer les données de l'année et du mois

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) 

Répondre

0

Eh bien, les versions ultérieures (2012+) de SQL Server ont une belle fonction intégrée appelée datefromparts. Cependant, puisque votre question est marquée avec cela n'aide pas tellement à moins que vous ne puissiez mettre à jour votre base de données (et vous devriez vraiment y penser, puisque 2005 n'est plus supporté par Microsoft).

Cependant, puisque vous savez que vous voulez que toutes les données entre Mars et Avril de l'année prochaine, vous pouvez simplement faire ceci:

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) 

(qui est, en supposant que l'utilisateur fournit l'année comme une valeur int.

+0

montre Syntaxe incorrecte proche de 'CAST', 'AS' attendu. @ L'année est transmise en 2017 dans une requête parmétrisée – user2431727

+0

J'ai fermé la parenthèse trop tôt. Essayez maintenant. –

+0

J'ai compris. S'il vous plaît corriger le Où avec et en réponse. WHERE submitted_date> = CAST (CASAnnée (@Year as char (4)) + '-03-01 00:00:00' Date limite) AND submitted_date user2431727

0

Si vous avez déjà le mois de début et la date à la main, alors je ne vois pas pourquoi vous ne pouvez pas ajouter une limite supérieure à la date de votre article 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)