2012-10-24 3 views
0
 SELECT TOP 92 PERCENT 
     Convert(DateTime,Floor(Cast((DateTime) as Float)*24)/24,0) AS SummaryDateTime, 
     MIN(APM_ApplicationAvailability.PercentAvailability) AS MIN_of_ApplicationAvailability, 
     Nodes.Caption AS NodeName 

     FROM 
     (Nodes INNER JOIN APM_AlertsAndReportsData ON (Nodes.NodeID = APM_AlertsAndReportsData.NodeId)) INNER JOIN APM_ApplicationAvailability ON (APM_AlertsAndReportsData.ApplicationId = APM_ApplicationAvailability.ApplicationID) 


     WHERE 
     (DateTime BETWEEN 40907 AND 41205) 
     AND 
     (
      (APM_AlertsAndReportsData.ApplicationName LIKE '%HTTP%') AND 
      (Nodes.Caption = 'www.example.com') 
     ) 
GROUP BY Convert(DateTime,Floor(Cast((DateTime) as Float)*24)/24,0), 
Nodes.Caption 


ORDER BY SummaryDateTime ASC 

Ci-dessus une requête me donnant le résultat suivant, qui est joint en tant qu'image. enter image description hereRequête SQL pour filtrer les résultats de correspondance

Je veux écrire une requête pour filtrer tous les résultats 0.00% il me contenterai donne seulement 0.00% données, parce que je ne se soucient pas de 100% données. Je ne sais pas comment filtrer les données.

Répondre

2

Est-ce votre requête complète? Vous avez des agrégats mixtes (MIN) et des agrégats non agrégés (Datetime).
Je suppose que vous avez un GROUP BY quelque part, mais dans tous les cas, l'approche directe sera de la sous-interroger.

SELECT * 
FROM (
    SELECT TOP 92 PERCENT 
     Convert(DateTime,Floor(Cast((DateTime) as Float)*24)/24,0) AS SummaryDateTime, 
     MIN(APM_ApplicationAvailability.PercentAvailability) AS MIN_of_ApplicationAvailability, 
     Nodes.Caption AS NodeName 
    FROM Nodes 
    INNER JOIN APM_AlertsAndReportsData 
      ON Nodes.NodeID = APM_AlertsAndReportsData.NodeId 
    INNER JOIN APM_ApplicationAvailability 
      ON APM_AlertsAndReportsData.ApplicationId = APM_ApplicationAvailability.ApplicationID 
    WHERE DateTime BETWEEN 40907 AND 41205 
     AND APM_AlertsAndReportsData.ApplicationName LIKE '%HTTP%' 
     AND Nodes.Caption = 'www.example.com' 
    -- GROUP BY.. 
) X 
WHERE MIN_of_ApplicationAvailability = 0.0 

Normalement, pour les requêtes globales, vous pouvez également utiliser la clause HAVING, comme

SELECT TOP 92 PERCENT 
     Convert(DateTime,Floor(Cast((DateTime) as Float)*24)/24,0) AS SummaryDateTime, 
     MIN(APM_ApplicationAvailability.PercentAvailability) AS MIN_of_ApplicationAvailability, 
     Nodes.Caption AS NodeName 
    FROM Nodes 
    INNER JOIN APM_AlertsAndReportsData 
      ON Nodes.NodeID = APM_AlertsAndReportsData.NodeId 
    INNER JOIN APM_ApplicationAvailability 
      ON APM_AlertsAndReportsData.ApplicationId = APM_ApplicationAvailability.ApplicationID 
    WHERE DateTime BETWEEN 40907 AND 41205 
     AND APM_AlertsAndReportsData.ApplicationName LIKE '%HTTP%' 
     AND Nodes.Caption = 'www.example.com' 
    GROUP BY DateTime, Nodes.Caption 
    HAVING MIN(APM_ApplicationAvailability.PercentAvailability) = 0.0 
+0

Désolé j'ai mis à jour ma question une partie était manquante .. désolé .. – Satish

+0

il suffit d'ajouter la partie manquante à ma réponse ci-dessus – RichardTheKiwi

+0

Vous avez posté deux requête que dois-je utiliser? – Satish

Questions connexes