2011-11-24 4 views
1

MatinRetour des dates distinctes

J'essaie de renvoyer les dates distinctes d'un résultat par un identificateur unique.

Par exemple:

ID|Date 
1 | 2011-10-01 23:57:59 
1 | 2011-10-01 23:58:59 
1 | 2010-10-01 23:59:59 
2 | 2010-09-01 23:59:59 
2 | 2010-09-01 23:58:29 
3 | 2010-09-01 23:58:39 
3 | 2010-10-01 23:59:14 
3 | 2010-10-01 23:59:36 

Les temps ne sont pas importantes seulement les dates. Donc, par exemple sur l'ID 1, je ne peux pas faire de distinction sur l'ID, car cela ne retournerait qu'une seule de mes dates. Donc, je voudrais revenir:

1|2011-10-01 
1|2010-10-01 

J'ai essayé la requête suivante:

Drop Table #Temp 

select Distinct DateAdd(dd, DateDiff(DD,0, Date),0) as DateOnly 
,ID 
Into #Temp 
From Table 

Select Distinct (Date) 
,ID 
From #Temp 

Je reçois les résultats suivants: cependant

ID|Date 
1 | 2011-10-01 00:00:00 
1 | 2011-10-01 00:00:00 
1 | 2010-10-01 00:00:00 

Je suis nouveau à SQL afin excuses j'ai peut-être fait une erreur flagrante. J'ai jusqu'ici cherché en parcourant les questions précédemment posées.

Comme toujours toute aide et pointeurs sont grandement appréciés.

+1

Quelle version de Sql Server? – sll

+0

Salut son sql 2005 –

Répondre

2

Vous pouvez utiliser la fonction T-SQL convert pour extraire la date.

Essayez

CONVERT(char(10), GetDate(),126) 

donc, dans votre cas, ne

Drop Table #Temp 

select Distinct CONVERT(char(10), DateAdd(dd, DateDiff(DD,0, Date),0), 126) as DateOnly 
,ID 
Into #Temp 
From Table 

Select Distinct (Date) 
,ID 
From #Temp 

Informations supplémentaires: Getting the Date Portion of a SQL Server Datetime field

espérons que cette aide!

+0

Etes-vous sûr que cela renverrait la date avec le délimiteur entre les parties de date? – sll

+0

oui, maintenant, je le pense;) merci – dknaack

+0

Merci dknaack qui fonctionne un régal. –

1

Si vous utilisez Sql Server 2008 - vous pouvez lancer DATETIME à un type construit Date, sinon pour se débarrasser du temps, vous devriez jeter à VARCHAR() seulement des pièces de jour/mois/année, puis reconvertir en datetime si le temps partie serait remis à zéro:

declare @dates table(id int, dt datetime) 
INSERT INTO @dates VALUES(1, '2011-10-01 23:57:49') 
INSERT INTO @dates VALUES(2, '2011-10-02 23:57:59') 
INSERT INTO @dates VALUES(2, '2011-10-02 23:57:39') 

SELECT stripped.id, stripped.dateOnly 
FROM 
(
    -- this will return dates with zeroed time part 2011-10-01 00:00:00.000 
    SELECT id, 
      CONVERT(datetime, 
      CAST(YEAR(dt) as VARCHAR(4)) + '-' + 
      CAST(MONTH(dt) AS VARCHAR(2)) + '-' + 
      CAST(DAY(dt) AS VARCHAR(2))) as dateOnly 
    FROM @dates 
) stripped 
GROUP BY stripped.id, stripped.dateOnly 
+0

Merci pour votre réponse, cela fonctionnerait-il en 2005? –

Questions connexes