sql - 每小时选择最新员工条目的 Oracle SQL 查询
问题描述
我将如何修改以下 SQL 查询代码以每小时返回每个员工的最新条目,而不是当前返回每个员工的每个事件,而不管它每小时在查询中出现多少次。
我已经附加了示例数据,以了解当前在数据库中的顺序和所需的表输出。注意:您可以看到它是按降序排列的,并且省略了 2 个条目(0001 和 0009),因为它们在一个小时的间隔内来自相同的员工。
SQL查询代码:
select
TRANSACTION_ID
EMPLOYEE_ID
FIRST_NAME
LAST_NAME
TIME_STAMP
from (select d.*,
row_number() over (partition by EMPLOYEE_ID, trunc(TIME_STAMP, 'HH') order by TIME_STAMP desc) as SEQNUM
from MAIN.DATABASE d
) d
where SEQNUM = 1;
order by TRANSACTION_ID desc;
这是数据库中数据的当前顺序:
TRANSACTION_ID | 员工ID | 名 | 姓 | TIME_STAMP |
---|---|---|---|---|
0001 | AAAA | 亚当 | 阿克巴 | 2021 年 10 月 5 日下午 4:42:42.000 |
0004 | BBBB | 巴里 | 边缘 | 2021 年 10 月 6 日上午 07:25:25.000 |
0003 | 中国交建 | 查理 | 车 | 2021 年 10 月 6 日上午 07:15:15.000 |
0005 | DDDD | 大卫 | 能源部 | 2021 年 10 月 6 日上午 7:27:27.000 |
0006 | 电子电气设备 | 埃里克 | 埃里克森 | 2021 年 10 月 6 日上午 7:29:29.000 |
0007 | FFFF | 弗雷德 | 敌人 | 2021 年 10 月 6 日上午 07:31:31.000 |
0008 | GGGG | 乔治 | 盖伊 | 2021 年 10 月 6 日上午 7:33:33.000 |
0010 | 呼呼呼 | 亨利 | 休 | 2021 年 10 月 6 日上午 07:55:55.000 |
0009 | 呼呼呼 | 亨利 | 休 | 2021 年 10 月 6 日上午 7:54:54.000 |
0002 | AAAA | 亚当 | 阿克巴 | 2021 年 10 月 5 日下午 4:43:43.000 |
这是应该返回的:
TRANSACTION_ID | 员工ID | 名 | 姓 | TIME_STAMP |
---|---|---|---|---|
0010 | 呼呼呼 | 亨利 | 休 | 2021 年 10 月 6 日上午 07:55:55.000 |
0008 | GGGG | 乔治 | 盖伊 | 2021 年 10 月 6 日上午 7:33:33.000 |
0007 | FFFF | 弗雷德 | 敌人 | 2021 年 10 月 6 日上午 07:31:31.000 |
0006 | 电子电气设备 | 埃里克 | 埃里克森 | 2021 年 10 月 6 日上午 7:29:29.000 |
0005 | DDDD | 大卫 | 能源部 | 2021 年 10 月 6 日上午 7:27:27.000 |
0004 | BBBB | 巴里 | 边缘 | 2021 年 10 月 6 日上午 07:25:25.000 |
0003 | 中国交建 | 查理 | 车 | 2021 年 10 月 6 日上午 07:15:15.000 |
0002 | AAAA | 亚当 | 阿克巴 | 2021 年 10 月 5 日下午 4:43:43.000 |
但是,这是代码当前返回的内容:
TRANSACTION_ID | 员工ID | 名 | 姓 | TIME_STAMP |
---|---|---|---|---|
0010 | 呼呼呼 | 亨利 | 休 | 2021 年 10 月 6 日上午 07:55:55.000 |
0006 | 电子电气设备 | 埃里克 | 埃里克森 | 2021 年 10 月 6 日上午 7:29:29.000 |
0003 | 中国交建 | 查理 | 车 | 2021 年 10 月 6 日上午 07:15:15.000 |
0002 | AAAA | 亚当 | 阿克巴 | 2021 年 10 月 5 日下午 4:43:43.000 |
知道我缺少什么以及如何解决吗?
解决方案
您的查询是:
- 条款中的条款之间缺少逗号
SELECT
;和 ;
在WHERE
过滤器之后和ORDER BY
子句之前有一个。
如果你解决了这些问题,那么你会得到代码:
select TRANSACTION_ID,
EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
TIME_STAMP
from (
select d.*,
row_number() over (
partition by EMPLOYEE_ID, trunc(TIME_STAMP, 'HH')
order by TIME_STAMP desc
) as SEQNUM
from MAIN.DATABASE d
) d
where SEQNUM = 1
order by TRANSACTION_ID desc;
其中,对于样本数据:
CREATE TABLE main.database (TRANSACTION_ID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME, TIME_STAMP ) AS
SELECT '0001', 'AAAA', 'Adam', 'Akbar', TIMESTAMP '2021-05-10 16:42:42.000' FROM DUAL UNION ALL
SELECT '0004', 'BBBB', 'Barry', 'Brink', TIMESTAMP '2021-06-10 07:25:25.000' FROM DUAL UNION ALL
SELECT '0003', 'CCCC', 'Charlie', 'Che', TIMESTAMP '2021-06-10 07:15:15.000' FROM DUAL UNION ALL
SELECT '0005', 'DDDD', 'David', 'Doe', TIMESTAMP '2021-06-10 07:27:27.000' FROM DUAL UNION ALL
SELECT '0006', 'EEEE', 'Eric', 'Erickson', TIMESTAMP '2021-06-10 07:29:29.000' FROM DUAL UNION ALL
SELECT '0007', 'FFFF', 'Fred', 'Foe', TIMESTAMP '2021-06-10 07:31:31.000' FROM DUAL UNION ALL
SELECT '0008', 'GGGG', 'George', 'Guy', TIMESTAMP '2021-06-10 07:33:33.000' FROM DUAL UNION ALL
SELECT '0010', 'HHHH', 'Henry', 'Hugh', TIMESTAMP '2021-06-10 07:55:55.000' FROM DUAL UNION ALL
SELECT '0009', 'HHHH', 'Henry', 'Hugh', TIMESTAMP '2021-06-10 07:54:54.000' FROM DUAL UNION ALL
SELECT '0002', 'AAAA', 'Adam', 'Akbar', TIMESTAMP '2021-05-10 16:43:43.000' FROM DUAL;
按预期工作:
TRANSACTION_ID 员工ID 名 姓 TIME_STAMP 0010 呼呼呼 亨利 休 21 年 6 月 10 日 07.55.55.000000000 0008 GGGG 乔治 盖伊 21 年 6 月 10 日 07.33.33.000000000 0007 FFFF 弗雷德 敌人 21 年 6 月 10 日 07.31.31.000000000 0006 电子电气设备 埃里克 埃里克森 21 年 6 月 10 日 07.29.29.000000000 0005 DDDD 大卫 美国能源部 21 年 6 月 10 日 07.27.27.000000000 0004 BBBB 巴里 边缘 21 年 6 月 10 日 07.25.25.000000000 0003 中国交建 查理 车 21 年 6 月 10 日 07.15.15.000000000 0002 AAAA 亚当 阿克巴 21 年 5 月 10 日 16.43.43.000000000
db<>在这里摆弄
推荐阅读
- java - 如何从文本文件中删除字符串?
- excel - 按月计算的唯一客户数
- esx - es_extended Fivem的问题有解决办法吗
- amazon-web-services - 通过 IAM 连接到 Redshift
- html - 通过 CSS 从外部控制 SVG 颜色的问题
- bash - 如何在 OSX 上将多个音频文件分割为 10 秒?
- php - 如何解决错误,SQLSTATE [23000]:完整性约束违规:1062 键 'users_email_unique' 的重复条目 'mail@mail.com'
- python - 多次调用mpi时关闭连接
- python - Flask:在没有 Cookie 的情况下存储 Socket-Connection 变量
- java - 有没有办法为firestore做一个适配器类