我正在寻找一种方法,将下面的emp\u出席行分组为星期一到星期日。
我在网上看到了一些关于“iw”格式的东西,但我认为这不允许我分组,也许我做错了什么。此外,诸如12312020星期四和01012021星期五这样的日期应该分组在一起,因为它们介于星期一和星期天之间,但它们是不同的年份。
我当前的代码是对所有数据求和并产生以下输出
select e.employee_id,
e.first_name,
e.last_name,
trunc(sum(a.end_date - a.start_date) * 24) hours,
trunc(mod(sum(a.end_date - a.start_date) * 24 * 60,60)) minutes,
round(mod(sum(a.end_date - a.start_date) * 24 * 60 * 60,60)) seconds
from employees e, emp_attendance a
where a.employee_id = e.employee_id
group by e.employee_id,
e.first_name, e.last_name
order by e.employee_id,
e.first_name,
e.last_name;
EMPLOYEE_ID FIRST_NAME
LAST_NAME HOURS
MINUTES SECONDS
1 John Doe 128 51 19
我正在寻找这个输出。注意:对于组中的每一行,我都需要相同的组id和组的开始日期(星期一)和结束日期(星期天),以便在需要时可以追溯数据的来源。
如果没有员工的emp\U出勤记录,请不要添加空行。在我的例子中,虽然员工2和3存在,但他们应该没有输出。
感谢所有的回答
GROUP_ID
EMPLOYEE_ID FIRST_NAME
LAST_NAME HOURS MINUTES SECONDS.
START_DATE END_DATE
1 1 John Doe 46 0 58 07202020 07262020
2 1 John Doe 73 37 14 07272020 08022020
3 1 John Doe 9 13 7 08032020 08082020
ALTER SESSION SET NLS_DATE_FORMAT = 'MMDDYYYY HH24:MI:SS';
Create table employees(
employee_id Number(6),
first_name VARCHAR2(20),
last_name VARCHAR2(20),
hourly_rate NUMBER
);
INSERT INTO employees(
employee_id,
first_name,
last_name,
hourly_rate)
VALUES
(1, 'John', 'Doe', 55.05);
INSERT INTO employees(
employee_id,
first_name,
last_name,
hourly_rate)
VALUES
(2, 'Jane', 'Smith', 45.50);
INSERT INTO employees(
employee_id,
first_name,
last_name,
hourly_rate)
VALUES
(3, 'Mike', 'Jones', 25.00);
create table emp_attendance(
employee_id NUMBER(6),
start_date DATE,
end_date DATE
);
INSERT INTO emp_attendance(
employee_id,
start_date,
end_date)
VALUES
(1,
TO_DATE('08032020 12:12:12', 'MMDDYYYY HH24:MI:SS'),
TO_DATE('08032020 21:25:19', 'MMDDYYYY HH24:MI:SS'));
INSERT INTO emp_attendance(
employee_id,
start_date,
end_date)
VALUES
(1,
TO_DATE('08022020 12:12:12', 'MMDDYYYY HH24:MI:SS'),
TO_DATE('08032020 19:25:19', 'MMDDYYYY HH24:MI:SS'));
INSERT INTO emp_attendance(
employee_id,
start_date,
end_date)
VALUES
(1,
TO_DATE('07212020 07:22:22', 'MMDDYYYY HH24:MI:SS'),
TO_DATE('07212020 14:49:13', 'MMDDYYYY HH24:MI:SS'));
INSERT INTO emp_attendance(
employee_id,
start_date,
end_date)
VALUES
(1,
TO_DATE('07222020 08:08:43', 'MMDDYYYY HH24:MI:SS'),
TO_DATE('07222020 16:15:55', 'MMDDYYYY HH24:MI:SS'));
INSERT INTO emp_attendance(
employee_id,
start_date,
end_date)
VALUES
(1,
TO_DATE('07232020 08:18:17', 'MMDDYYYY HH24:MI:SS'),
TO_DATE('07232020 15:58:16', 'MMDDYYYY HH24:MI:SS'));
INSERT INTO emp_attendance(
employee_id,
start_date,
end_date)
VALUES
(1,
TO_DATE('07242020 10:50:15', 'MMDDYYYY HH24:MI:SS'),
TO_DATE('07242020 18:21:41', 'MMDDYYYY HH24:MI:SS'));
INSERT INTO emp_attendance(
employee_id,
start_date,
end_date)
VALUES
(1,
TO_DATE('07252020 18:06:11', 'MMDDYYYY HH24:MI:SS'),
TO_DATE('07262020 01:34:37', 'MMDDYYYY HH24:MI:SS'));
INSERT INTO emp_attendance(
employee_id,
start_date,
end_date)
VALUES
(1,
TO_DATE('07262020 10:57:07', 'MMDDYYYY HH24:MI:SS'),
TO_DATE('07262020 18:44:11', 'MMDDYYYY HH24:MI:SS'));
INSERT INTO emp_attendance(
employee_id,
start_date,
end_date)
VALUES
(1,
TO_DATE('07272020 09:35:44', 'MMDDYYYY HH24:MI:SS'),
TO_DATE('07272020 16:14:13', 'MMDDYYYY HH24:MI:SS'));
INSERT INTO emp_attendance(
employee_id,
start_date,
end_date)
VALUES
(1,
TO_DATE('07282020 07:08:31', 'MMDDYYYY HH24:MI:SS'),
TO_DATE('07282020 17:17:12', 'MMDDYYYY HH24:MI:SS'));
INSERT INTO emp_attendance(
employee_id,
start_date,
end_date)
VALUES
(1,
TO_DATE('07292020 05:38:27', 'MMDDYYYY HH24:MI:SS'),
TO_DATE('07292020 13:06:49', 'MMDDYYYY HH24:MI:SS'));
INSERT INTO emp_attendance(
employee_id,
start_date,
end_date)
VALUES
(1,
TO_DATE('07302020 08:11:51', 'MMDDYYYY HH24:MI:SS'),
TO_DATE('07302020 18:29:40', 'MMDDYYYY HH24:MI:SS'));
INSERT INTO emp_attendance(
employee_id,
start_date,
end_date)
VALUES
(1,
TO_DATE('07312020 18:01:51', 'MMDDYYYY HH24:MI:SS'),
TO_DATE('08012020 01:52:37', 'MMDDYYYY HH24:MI:SS'));
3条答案
按热度按时间hkmswyz61#
在上面的数据库结构中,您可以使用emp\u attention表中的start\u date列来计算当前周数,然后根据它进行分组。
可以将附加参数与round函数round(column\u name,round\u num)一起使用,将负值与第二个参数一起使用
-1表示10的整数
-2表示整数到100
-3表示整数到1000
等等。。。
查询应类似于以下内容:
w51jfk4q2#
有很多帖子都有类似的主题,所以我会边走边链接->
这篇文章可以帮助你按周分组数据,按周分组计算oraclesql-sum和分组数据
然后可以使用mysql round()函数将参数设置为舍入到最接近10的位置。在此处找到文档https://docs.oracle.com/cd/b19306_01/server.102/b14200/functions135.htm
klsxnrf13#
你可以在星期一和
trunc()
函数和“iw”元素;然后按此字段和其他字段分组:要获得所需的输出,可以操纵截断的日期,并添加
row_number()
对于组id:db<>摆弄当前数据;以及原始数据。