gpt4 book ai didi

oracle - plsql:在分组语句中获取另一个字段值以及聚合值

转载 作者:行者123 更新时间:2023-12-02 04:00:21 25 4
gpt4 key购买 nike

我正在开发一个考勤系统。我将员工的交易存储在下表中:

Transaction Table

我想获取每个员工的最早和最新交易,包括他们的日期类型

我可以使用分组聚合来获取日期。但是,我无法弄清楚如何使用它们获取类型

你能帮我一下吗?

谢谢。

最佳答案

这就是 FIRST 和 LAST 聚合函数的设计目的。

这是文档的链接:

第一:http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/functions065.htm#SQLRF00641最后:http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/functions083.htm#sthref1206

这是一个例子:

SQL> create table my_transactions (id,employee_id,action_date,type)
2 as
3 select 1, 1, sysdate, 'A' from dual union all
4 select 2, 1, sysdate-1, 'B' from dual union all
5 select 3, 1, sysdate-2, 'C' from dual union all
6 select 4, 1, sysdate-3, 'D' from dual union all
7 select 5, 2, sysdate-11, 'E' from dual union all
8 select 6, 2, sysdate-12, 'F' from dual union all
9 select 7, 2, sysdate-13, 'G' from dual
10 /

Table created.

SQL> select *
2 from my_transactions
3 order by id
4 /

ID EMPLOYEE_ID ACTION_DATE T
---------- ----------- ------------------- -
1 1 04-07-2011 10:15:07 A
2 1 03-07-2011 10:15:07 B
3 1 02-07-2011 10:15:07 C
4 1 01-07-2011 10:15:07 D
5 2 23-06-2011 10:15:07 E
6 2 22-06-2011 10:15:07 F
7 2 21-06-2011 10:15:07 G

7 rows selected.

SQL> select employee_id
2 , min(action_date) min_date
3 , max(type) keep (dense_rank first order by action_date) min_date_type
4 , max(action_date) max_date
5 , max(type) keep (dense_rank last order by action_date) max_date_type
6 from my_transactions
7 group by employee_id
8 /

EMPLOYEE_ID MIN_DATE M MAX_DATE M
----------- ------------------- - ------------------- -
1 01-07-2011 10:15:07 D 04-07-2011 10:15:07 A
2 21-06-2011 10:15:07 G 23-06-2011 10:15:07 E

2 rows selected.

问候,
罗布。

关于oracle - plsql:在分组语句中获取另一个字段值以及聚合值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6567824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com