【问题标题】:Group By,Order by DateTime分组依据,按日期时间排序
【发布时间】:2012-07-03 18:55:09
【问题描述】:

我有近 15000 个数据行,第一列包含日期格式: 2012-05-10 09:00:00.000

我需要按年、月、日、小时对这些数据进行排序,例如:

         2012-05-10 09:00:00.000
         2012-05-10 10:00:00.000
         2012-05-10 11:00:00.000
         2012-05-10 12:00:00.000
         2012-05-11 09:00:00.000
         2012-05-11 10:00:00.000
         2012-05-11 11:00:00.000
         2012-05-11 12:00:00.000
         2012-06-01 02:00:00.000
         2012-06-01 03:00:00.000
         2012-06-01 04:00:00.000
         2012-06-01 05:00:00.000

当前SQL 查询如下:

SELECT MIN(Datetime) GROUP BY DATEPART(M,jmusa_LOG1.DateTime),DATEPART(D,jmusa_LOG1.DateTime),DATEPART(HH,jmusa_LOG1.DateTime) HAVING MIN(jmusa_LOG1.DateTime) NOT IN(SELECT DateTime FROM AverageRawData)

ORDER BY DATEPART(M,jmusa_LOG1.DateTime),DATEPART(D,jmusa_LOG1.DateTime),DATEPART(HH,jmusa_LOG1.DateTime)

【问题讨论】:

  • 您无法按年份对结果进行排序,因为它不包含在您的分组依据中。例如,2012-05-10 09:002011-05-10 09:00 的值将在同一个组中结束。
  • 您当前的查询无法编译。
  • 您似乎缺少FROM 子句。
  • 如果你只是想要它排序,为什么你有一个 group by 和一个 having 子句?

标签: sql group-by sql-order-by


【解决方案1】:

你正在描述一个正常的日期排序,所以你可以这样做:

select MyDate
from AverageRawData
order by MyDate

如果您不想重复,请像这样添加DISTINCT

select distinct MyDate
from AverageRawData
order by MyDate

如果这不符合您的要求,请提供用于生成输出示例的示例数据。

【讨论】:

  • 我正在使用 Group by 和 order by,因为我在上面的代码中没有显示的其他列中有聚合
  • 请发布示例数据和所需的输出。
  • 由于数据太大,我把它放在一个 csv 文件中:sendspace.com/file/c1rxlr 我希望平均数据按月、日和年排序。因此,当 Select 语句对其他列进行平均时,它们都将根据日期和小时进行排列
猜你喜欢
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 2013-05-07
  • 2020-10-29
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
相关资源
最近更新 更多