查询以选择每小时最新的员工条目
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;
【讨论】:
太棒了——这行得通。我只需要在末尾添加另一个“按时间戳顺序排序”,以便按照最新到最旧的顺序获取所有剩余条目。以上是关于查询以选择每小时最新的员工条目的主要内容,如果未能解决你的问题,请参考以下文章