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