【问题标题】:SQL Getting data by the hourSQL 按小时获取数据
【发布时间】:2015-12-29 08:08:10
【问题描述】:

您好,我在 SQL Server 2008 中有一个天气数据库,其中充满了每 20 分钟进行一次的天气观测。我想获取每小时而不是每 20 分钟的天气记录,如何过滤掉一些结果,所以结果中只有每小时的第一次观察。

例子:

7:00:00
7:20:00
7:40:00
8:00:00

期望的输出

7:00:00 
8:00:00

【问题讨论】:

  • 每小时是否有每 20 分钟增量的行,或者是否有任何间隙?
  • 应用这样的 WHERE 条件:WHERE datepart(minute, hour_column) = <here_desired_minutes>。在您的情况下,每小时将是 00。

标签: sql sql-server


【解决方案1】:

要准确获得(更少的事实是它是 INT 而不是 TIME;没有什么难修复的)您列出的所需结果,

SELECT DISTINCT DATEPART(HOUR, TimeStamp)
FROM Observations

如果您也想添加CAST(TimeStamp AS DATE),也可以添加。


但是,假设您也想要数据,这取决于一点,但根据您所描述的内容,简单的解决方案就是说:

SELECT *
FROM Observations
WHERE DATEPART(MINUTE, TimeStamp) = 0

但是,如果您缺少数据,这会失败,这很常见。


如果您确实有几个小时需要数据,但在 :00 处没有一行,您可以执行以下操作:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY CAST(TimeStamp AS DATE), DATEPART(HOUR, TimeStamp) ORDER BY TimeStamp)
    FROM Observations
)

SELECT *
FROM cte
WHERE n = 1

对于任何日期/小时组合,这将采用第一个。

当然,您仍然会遗漏一小时内没有数据的任何内容。如果您甚至想返回这些实例,那将需要一个数字表。

【讨论】:

    【解决方案2】:

    您可以使用如下公式来获取时间点的最近小时(在本例中为GETUTCDATE())。

    SELECT  DATEADD(MINUTE, DATEDIFF(MINUTE, 0, GETUTCDATE()) / 60 * 60, 0)
    

    然后你可以在你的 SQL 查询的WHERE 子句中使用这个公式来获取你想要的数据。

    【讨论】:

      【解决方案3】:

      您需要GROUP BY 您想要的时间范围,例如日期和时间。然后,您将获得时间范围的MIN 值。由于您没有指定要使用的列,因此这是我能给出的最通用的内容。

      【讨论】:

        【解决方案4】:

        用作过滤器:

        ... where DATEPART(MINUTE, DateColumn) = 0
        

        【讨论】:

          【解决方案5】:

          要过滤每个整小时的结果,您可以将 where 子句设置为检查 00 分钟,因为每个整小时都是 HH:00:00。

          要从时间戳中获取分钟部分,您可以使用 DATEPART 函数。

          SELECT * 
          FROM YOURTABLENAME
          WHERE DATEPART(MINUTE, YOURDATEFIELDNAME) = 0
          

          关于 datepart 函数的更多信息可以在这里找到:http://www.w3schools.com/sql/func_datepart.asp

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-05-06
            • 1970-01-01
            • 2020-07-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多