Возвращение отличных дат - PullRequest
1 голос
/ 24 ноября 2011

Утро

Я пытаюсь вернуть разные даты результата по уникальному идентификатору.

Например:

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

Время не важно, простоДаты.Так, например, для идентификатора 1 я не могу сделать отчет по идентификатору, так как это вернет только одну из моих датПоэтому я хотел бы вернуть:

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

Я попробовал следующий запрос:

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

Однако я получаю следующие результаты:

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

IЯ новичок в SQL, поэтому извинения я, возможно, сделал явную ошибку.Я дошел до этого, просматривая ранее заданные вопросы.

Как всегда, любая помощь и указатели очень ценятся.

Ответы [ 2 ]

2 голосов
/ 24 ноября 2011

Вы можете использовать функцию T-SQL convert для извлечения даты.

Попробуйте

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

так что, в вашем случае, сделайте

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 

дополнительная информация: Получение части даты поля SQL Server Datetime

надеюсь, это поможет!

1 голос
/ 24 ноября 2011

Если вы используете Sql Server 2008 - вы можете преобразовать столбец DateTime во встроенный тип Date, в противном случае, чтобы избавиться от времени, вы должны привести к VARCHAR() только части дня / месяца / года, а затем преобразовать обратно вdatetime поэтому часть времени обнуляется:

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
...