You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Datetime列按日期分组并按Datetime排序,展示完整日期时间?

按日期分组、显示最早时间并排序的SQL解决方案

嘿,我明白你的需求了——你想要按Date列的日期部分分组,拿到每个日期对应的最早完整时间(带时分),还要按时间排序,输出类似15/01/2018 18:52这样的格式对吧?

先说说你原来SQL的小问题

你之前写的:

SELECT MIN(CAST(Date AS DATE)) FROM [TEST].[dbo].[PROD] GROUP BY CAST(Date AS DATE)

这里把Date转成DATE类型后,时间部分就被去掉了,所以MIN(CAST(Date AS DATE))其实和分组的日期值完全一样,自然拿不到带时间的结果。我们需要调整思路,直接取每个日期分组里最早的完整datetime记录。

修正后的SQL语句

方案1:分开显示日期和时间

如果想把日期和时间分成两列输出,可以用这个:

SELECT 
    CAST(Date AS DATE) AS [日期],
    MIN(Date) AS [当日最早时间]
FROM [TEST].[dbo].[PROD]
GROUP BY CAST(Date AS DATE)
ORDER BY [日期] -- 或者 ORDER BY MIN(Date),效果完全一致

执行后会得到两列数据,一列是纯日期,另一列是带时分的完整时间。

方案2:合并成你想要的格式输出

如果希望直接输出日期 时间的格式,比如15/01/2018 18:52,可以直接取每个分组的最小datetime,再按需格式化:

SELECT 
    FORMAT(MIN(Date), 'dd/MM/yyyy HH:mm') AS [日期时间]
FROM [TEST].[dbo].[PROD]
GROUP BY CAST(Date AS DATE)
ORDER BY MIN(Date)

这里的FORMAT函数适用于SQL Server 2012及以上版本,能帮你把datetime转换成指定的字符串格式。如果是更早的SQL Server版本,也可以用CONVERT函数来调整格式:

SELECT 
    CONVERT(VARCHAR(16), MIN(Date), 103) AS [日期时间]
FROM [TEST].[dbo].[PROD]
GROUP BY CAST(Date AS DATE)
ORDER BY MIN(Date)

103是SQL Server里对应dd/mm/yyyy格式的代码,VARCHAR(16)会保留到分钟部分,刚好符合你的需求。

结果验证

不管用哪个方案,最终排序后的结果都会是你期望的样式:

日期时间
15/01/2018 18:52
16/01/2018 18:52
17/01/2018 xx:xx
...

内容的提问来源于stack exchange,提问作者rich dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:18:50