2017-05-16 1 views
0

Je suis nouveau dans le monde de SQL Server. J'ai un tableau comme ci-dessous:Comment faire une prévision basée sur une journée?

alert_id | create_date | Status 
---------+-------------+--------- 
1231  | 4/15/2017 | Open 
1232  | 4/15/2017 | Open 
1234  | 4/15/2017 | Closed 
1235  | 4/16/2017 | Open 

Toutes ces alertes devraient être fermées dans 30 jours. J'ai besoin d'un rapport de prévision indiquant le nombre d'alertes ouvertes au cours des 30 derniers jours.

Je voudrais écrire une requête de sélection dont la sortie serait de 2 colonnes. La première serait la date et la seconde serait comptée. La colonne de date doit afficher toutes les dates pour les 30 prochains jours et la colonne Nombre doit afficher le nombre d'enregistrements qui doivent expirer ce jour-là. Quelque chose comme ci-dessous pourrait fonctionner. Veuillez aider.

date  | Count 
----------+--------- 
5/15/2017 | 2 
5/16/2017 | 3 
5/17/2017 | 0 
5/18/2017 | 0 
. 
. 
. 
6/14/2017 | 0 
+2

vous utilisez sql-server ou mysql? ... enlever la mauvaise balise et la bonne – scaisEdge

Répondre

0

C'est un travail pour GROUP BY et arithmétique date. MySQL:

SELECT DATE(create_date) + INTERVAL 30 DAY expire_date, COUNT(*) num 
    FROM tbl 
WHERE status = 'Open' 
GROUP BY DATE(create_date) 

DATE(create_date) + INTERVAL 30 DAY vous obtient les valeurs de date de création de trente jours supplémentaires.

GROUP BY(create_date) regroupe vos données selon les valeurs de votre date de création, tronquées à minuit.

Et, COUNT(*) va avec GROUP BY pour vous dire combien d'enregistrements dans chaque groupe.

Modifier Dans les versions récentes de SQL Server (MS)

SELECT DATEADD(day, 30, CAST(create_date AS DATE)) expire_date, COUNT(*) num 
    FROM tbl 
WHERE status = 'Open' 
GROUP BY CAST(create_date AS DATE) 

avis, s'il vous plaît, que l'arithmétique de la date varie entre marque et le modèle du logiciel serveur SQL. C'est pourquoi vous êtes harcelé par les utilisateurs de Stack Overflow dans les commentaires lorsque vous utilisez plus d'un tag comme [oracle] [mysql] [sql-server] sur vos questions.

Cool, hein? Vous devriez lire sur les requêtes agrégées, parfois appelées requêtes récapitulatives.

Vous n'allez pas obtenir les dates manquantes avec des zéros par eux. C'est un peu plus difficile à faire avec SQL.

+0

J'utilise sql-server. Lorsque essayé ci-dessus approche, l'erreur avec "'DATE' n'est pas un nom de fonction intégré reconnu." – Monty

+0

ressemble à la requête ci-dessous me donne le résultat souhaité pour la colonne "date", mais je ne suis pas sûr de savoir comment joindre cela avec create_date pour récupérer les données requises pour la 2ème colonne.
sélectionnez dateadd (d, nombre, getdate() - 1) en tant que [date] à partir de master..spt_values ​​où type = 'p' et nombre compris entre 1 et 30; – Monty

+0

toute aide est appréciée. – Monty