查询以选择每小时最新的员工条目

Posted

技术标签:

【中文标题】查询以选择每小时最新的员工条目【英文标题】:Query to Select Latest Employee Entry Per Each Hour 【发布时间】:2021-10-19 13:11:15 【问题描述】:

我将如何修改以下 SQL 查询代码以每小时返回每个员工的最新条目,而不是当前返回每个员工的每个事件,无论它每小时在查询中出现多少次。

例如,如果员工在下午 2-3 点之间有 4 个条目,在下午 3-4 点之间有 1 个条目,则只返回下午 2-3 点间隔的最后一个条目和下午 3-4 点间隔的 1 个条目。

SQL查询代码:

SELECT
     EMPLOYEE_ID
     FIRST_NAME
     LAST_NAME
     MAX(TIMESTAMP) AS LATEST_TIMESTAMP
FROM 
     MAIN.DATABASE
GROUP BY
     EMPLOYEE_ID, FIRST_NAME, LAST_NAME, TIMESTAMP
ORDER BY TIMESTAMP desc;

数据表:

EMPLOYEE_ID FIRST_NAME LAST_NAME TIMESTAMP
123456789 John Doe 8/17/2021 3:39:39.000000 PM
123456789 John Doe 7/23/2021 2:13:55.000000 PM
123456789 John Doe 7/23/2021 2:13:54.000000 PM
123456789 John Doe 7/23/2021 2:13:53.000000 PM
123456789 John Doe 7/23/2021 2:13:52.000000 PM

【问题讨论】:

你的标题是“Oracle”,你的标签是 [sql-server] 和 [mysql]...你真正在用什么。请修正你的标签。 另外,在同一列上聚合和分组很少是正确的选择。 【参考方案1】:

如果您使用的是 Oracle(如标题所示),那么您可以像这样使用 row_number()

select d.*
from (select d.*,
             row_number() over (partition by employee_id, trunc(timestamp, 'HH') order by timestamp desc) as seqnum
      from main.database d
     ) d
where seqnum = 1;

【讨论】:

太棒了——这行得通。我只需要在末尾添加另一个“按时间戳顺序排序”,以便按照最新到最旧的顺序获取所有剩余条目。

以上是关于查询以选择每小时最新的员工条目的主要内容,如果未能解决你的问题,请参考以下文章

什么是 SQL 查询以 5 分钟间隔选择数据和数据条目的 AVG

快速多选 MySQL 和 PHP

Django Pagination,用户选择的条目数量错误

Laravel Eloquent/DB 选择每组前 1 行

选择查询|选择不以数字开头的条目 - MySQL

MySQL 从 7 天前选择行