【问题标题】:Get the max Time in a datetime column for specific Hours in the day?获取日期时间列中特定时间的最大时间?
【发布时间】:2019-10-08 00:18:12
【问题描述】:

我有一个名为SnapshotDate 的专栏,两年前每 30 分钟拍摄一次快照(以下链接中的此专栏示例)。

当小时为 6 或 15 时,如何在 SnapshotDate 中获取最大分钟(或秒)条目?

注意:30 分钟的间隔已经改变了很多次,所以我不能在 WHERE 子句中专门使用 06:50 或 15:50。

我目前有 WHERE DATEPART(hh,ys.SnapshotDate) IN (6,15) 只能在 0600 或 1500 小时内获取 SnapshotDate 条目,但是如何检索这些条目中的最大时间,以便在特定的一天,我只能得到两个结果:一个在 06:50 和另一个在 15:50

【问题讨论】:

    标签: sql-server datetime hour ssms-2017


    【解决方案1】:

    我会为此推荐row_number(),因为:

    select t.*
    from (select t.*,
                 row_number() over (partition by convert(date, snapshotdate), datepart(hour, snapshotdate)
                                    order by snapshotdate desc
                                   ) as seqnum
          from t
          where datepart(hour, snapshot) in (6, 15)
         ) t
    where seqnum = 1;
    

    不幸的是,SQL Server 没有任何类型的date_trunc() 函数。但您可以转换为日期并使用小时。

    【讨论】:

      【解决方案2】:

      这是一个基于窗口函数的查询,对于数据集中的每一天,它会为您提供两条记录:6 小时时间段中的最后一条记录,以及 15 小时时间段中的最后一条记录:

      SELECT *
      FROM (
          SELECT 
              t.*,
              ROW_NUMBER() OVER(
                  PARTITION BY YEAR(SnapshotDate), MONTH(SnapshotDate), DAY(SnapshotDate), DATEPART(hh, SnapshotDate) 
                  ORDER BY SnapshotDate DESC
              ) rn
          FROM mytable
          WHERE DATEPART(hh, SnapshotDate) IN (6, 15)
      ) WHERE rn = 1
      

      如果你只想要整个表中6h时间段中时间最长的记录和15h时间段中时间最长的记录(而不是每天),那么你可以删除PARTITION子句:

      SELECT *
      FROM (
          SELECT 
              t.*,
              ROW_NUMBER() OVER(ORDER BY SnapshotDate DESC) rn
          FROM mytable
          WHERE DATEPART(hh, SnapshotDate) IN (6, 15)
      ) WHERE rn = 1
      

      【讨论】:

      • 谢谢,我使用了您提供的第一个查询(与其他标记解决方案相同,但使用了convert(date,SnapshotDate) 而不是将其分解为YEARMONTHDAY)它就像一个魅力!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多