2013-06-23 2 views
2

J'ai problème pour sélectionner COUNT distincts: La réponse est que je dois 6. Le temps est différent < 300sec en compte comme 1. Mon sql:Comment sélectionner COUNT DISTINCT?

SELECT COUNT(DISTINCT(cast([Date] as date) + cast([time] as datetime))) 
FROM [Table1]WHERE [DATE] = '2013-06-22' 
AND ErrCode = 'Scrubber Failure'AND Frequency = 1 

+0

Quel système de base de données utilisez-vous? –

+0

Ressemble au serveur SQL avec la syntaxe [Date] – Bohemian

+0

Alex - SQL Server 2008 – user2286756

Répondre

1

MISE À JOUR

SELECT COUNT(DISTINCT 
      ROUND(CONVERT(DECIMAL(20, 4), 
        DATEDIFF(minute, 
           CONVERT(datetime, '2013-01-01 00:00:00', 120), 
           CONVERT(datetime, date + ' ' + time, 120)))/5, 0)) n 
    FROM table1 
WHERE date = '2013-06-22' 
    AND errcode = 'Scrubber Failure' 
    AND frequency = 1 

Sortie:

 
| N | 
----- 
| 6 | 

Voici SQLFiddle démo.

+0

tq pour répondre ... hmm vous comparez avec '2013-01-01 00:00:00' (date fixe). Hmm .. Je pense, ce qui se passera s'il y a des données pour '2014-06-22' (déjà mettre à jour le schéma). Pourquoi est-ce que vous devidez par (/ 5)? Avec un nouveau schéma, la réponse devrait être = 7. – user2286756

+0

Bien n'importe quelle date <= extrémité inférieure de votre filtre de date dans la clause WHERE peut être utilisée comme date de base et seulement nécessaire pour calculer la différence de temps en minutes. Dans votre exemple particulier, il peut également être «2013-06-22». 300 sec/60 = 5 minutes d'intervalle, et c'est pourquoi le diff est divisé par 5. Maintenant, ici est mis à jour sqlfiddle avec la date '2014-06-22' http://sqlfiddle.com/#!3/1ebf0/1. Le résultat est 7. – peterm

+0

@ user2286756 A-t-il aidé? – peterm