Применить значение даты в группе, но поле вывода оператора SELECT получит значение DateTime - PullRequest
0 голосов
/ 07 декабря 2018

Структура таблицы:

ID   DeviceNumber   CreatedDate
1      101          2018-07-07 07:50:19.0000000
2      101          2018-07-07 01:50:19.0000000
3      101          2018-07-07 06:50:19.0000000
4      101          2018-07-08 02:50:19.0000000

Вывод:

ID   DeviceNumber   CreatedDate
1      101          2018-07-07 07:50:19.0000000
2      101          2018-07-08 02:50:19.0000000

Здесь я применяю предложение GROUPBY в поле CreatedDate, поэтому я отделил день-месяц-год,но в выводе запроса мне нужно Date и Time в CreatedDate значение поля.

Мой оператор SQL:

SELECT DeviceNumber,  
Convert(varchar(30),Concat(CalMonth, '-' , CalDay, '-' ,CalYear),102)  as CreateDateTime
FROM 
(
select DeviceNumber, DAY(CreatedDate) as CalDay, MONTH(CreatedDate) as CalMonth, YEAR(CreatedDate) as CalYear 
from TableDevice
) AS T
GROUP BY DeviceNumber, CalDay, CalMonth, CalYear

В выводе мне нужно DeviceNumber и CreatedDate(с датой и временем)

Спасибо за продвижение

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

вам нужно max() с группировкой по дате

select DeviceNumber, max(CreatedDate) as CreatedDate
from TableDevice
group by DeviceNumber, convert(date,CreatedDate)

Если нужны все поля в выборе, вы можете использовать коррелированный подзапрос

select t1.* from TableDevice t1
where CreatedDate= (select max(CreatedDate)
                    from TableDevice t2
                    where   convert(date,t2.CreatedDate)=convert(date,t1.CreatedDate)
)
0 голосов
/ 07 декабря 2018

Как указывалось в предыдущих ответах, вам нужно указать, какое время вы хотите связать с агрегированной датой?

Но если вы хотите, чтобы дата и время были в отдельных полях, используйте DATE (CreatedDate) и TIME (CreatedDate)

0 голосов
/ 07 декабря 2018

Кажется, вы использовали GROUP BY для объединения всех строк с одним и тем же днем ​​в один, но вам все еще нужно время.В какое время, правда?Вам нужна функция агрегирования, которая будет возвращать соответствующую функцию.Так как он называется CreatedDate, держу пари, что это первое, что вам нужно (мин.)не время.

...