Sql 在group by中应用日期值,但选择语句输出字段获取日期时间值

Sql 在group by中应用日期值,但选择语句输出字段获取日期时间值,sql,sql-server,group-by,Sql,Sql Server,Group By,表结构: 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 DeviceNumbe

表结构:

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
这里我在
CreatedDate
字段中应用
GROUPBY
子句,这就是为什么我将日-月-年分开,但在查询输出中,我需要
CreatedDate
字段值中的
Date
Time

我的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
(带日期和时间)


感谢您的帮助

您似乎使用了
分组方式
,以便在同一天内合并所有行,但您仍然需要一段时间。但是什么时候?您需要一个聚合函数来返回适当的函数。由于它名为CreatedDate,我打赌它是您需要的第一个(min)

convert(date,CreatedDate)
是一种通过排除时间部分进行分组的更简单的方法:转换将只保留日期,而不保留时间。

您需要
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)
)

正如前面的回答所述,您需要指定要与聚合日期关联的时间


但是,如果您希望在单独的字段中包含日期和时间,请使用日期(CreatedDate)和时间(CreatedDate)

共享有关输入的示例输出如果您按天分组,但需要一天中的时间,那么您在这里尝试实现什么?我在您的查询中也看不到聚合,因此我看不到a
GROUP BY
子句的任何原因。如果您想同时查看日期和时间,则不能将其分组。@ZaynulAbadinTuhin更新为output@Larnu按DeviceNumber、CalDay、CalMonth、CalYear分组应用
select t1.* from TableDevice t1
where CreatedDate= (select max(CreatedDate)
                    from TableDevice t2
                    where   convert(date,t2.CreatedDate)=convert(date,t1.CreatedDate)
)