SQL:如何查询每小时只选择第一行?

Mr.*_*keo 4 sql sql-server select

我试图找到如何从每分钟将数据记录到数据库的记录设备中选择每小时的第一行。

我的示例数据:

Val     Date_time
1734618 2017-06-09 14:01:04
1734609 2017-06-09 14:00:05
1734601 2017-06-09 13:59:04
1734593 2017-06-09 13:58:04
...
1734127 2017-06-09 13:02:04
1734119 2017-06-09 13:01:04
1734111 2017-06-09 13:00:05
1734103 2017-06-09 12:59:04
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道如何每小时只从时间数据中查询第一行,我不知道为什么我不能在Microsoft SQL 服务器管理中使用 DATE_FORMAT() 函数自动完成文本中没有这个函数根本。我发现这个每分钟选择一次它对我不起作用,因为仅没有 DATE_FORMAT() 函数。

SELECT * 
FROM table 
WHERE Date_time IN ( SELECT MIN(Date_time) AS Date_time
              FROM table
              GROUP BY DATE_FORMAT(Date_time,'%Y-%m-%d %H:%i'))
Run Code Online (Sandbox Code Playgroud)

我的示例输出:2 行

Val     Date_time
1734609 2017-06-09 14:00:05
1734111 2017-06-09 13:00:05
Run Code Online (Sandbox Code Playgroud)

任何想法请帮助先生?非常感谢您的帮助。

编辑:使用 FORMAT() 函数可以工作。

t-c*_*.dk 6

不要使用使用子选择的解决方案,性能会受到影响,并且随着时间的推移,上面的当前 4 个示例会给您一个不正确的结果(尝试添加 1734618, '2017-05-09 14:01:04')。这种方法更有效:

SELECT
  TOP 1 WITH TIES 
    *
FROM <yourtable>
ORDER BY
  row_number()over
    (partition by dateadd(hour, datediff(hour, 0, Date_time),0) ORDER BY Date_time)
Run Code Online (Sandbox Code Playgroud)