我有一張 EMPLOYEES 表,其中包含有關當天 DATE 和 WORKTIME 的資訊。外匯:
ID | DATE | WORKTIME |
----------------------------------------
1 | 1-Sep-2014 | 4 |
2 | 2-Sep-2014 | 6 |
1 | 3-Sep-2014 | 5.5 |
1 | 4-Sep-2014 | 7 |
2 | 4-Sep-2014 | 4 |
1 | 9-Sep-2014 | 8 |
等等。
問題:如何創建一個查詢來計算每周作業的時間量 (HOURS_PERWEEK)。我知道我需要 WORKTIME 的總和以及考慮 ID 和周數的分組,但到目前為止,我的試驗和谷歌搜索沒有產生任何結果。對此有什么想法嗎?先感謝您!
編輯:
得到了解決方案
select id, sum (worktime), trunc(date, 'IW') week
from employees
group by id, TRUNC(date, 'IW');
但是需要通過更新新創建的列(例如 WEEKLY_TIME)以某種方式將該特定輸出與 DATE 表連接起來。有什么提示嗎?
uj5u.com熱心網友回復:
您可以使用TRUNC("DATE", 'IW').
因此,如果在查詢中,您GROUP BY是id一周的開始,那么TRUNC("DATE", 'IW')您可以SELECT通過id聚合來找到每個.SUMWORKTIMEid
由于這似乎是一個家庭作業問題并且您還沒有嘗試過查詢,所以我將把它留在這里以向您指出正確的方向,您可以完成查詢。
更新
現在我需要創建另一列(我們稱之為 WEEKLY_TIME)并用當前輸出中的值填充它,這樣 Sep 1、3、4(對于 ID=1)都將包含值 16.5,指定那天(即是在某個星期內)該人總共作業了 16.5。對于 ID=2,9 月 2 日和 4 日的值都是 10。
為此,如果我理解正確,您似乎不想使用聚合函式并希望使用該函式的分析版本:
select id,
"DATE",
trunc("DATE", 'IW') week,
worktime,
sum (worktime) OVER (PARTITION BY id, trunc("DATE", 'IW'))
AS weekly_time
from employees;
其中,對于樣本資料:
CREATE TABLE employees (ID, "DATE", WORKTIME) AS
SELECT 1, DATE '2014-09-01', 4 FROM DUAL UNION ALL
SELECT 2, DATE '2014-09-02', 6 FROM DUAL UNION ALL
SELECT 1, DATE '2014-09-03', 5.5 FROM DUAL UNION ALL
SELECT 1, DATE '2014-09-04', 7 FROM DUAL UNION ALL
SELECT 2, DATE '2014-09-04', 4 FROM DUAL UNION ALL
SELECT 1, DATE '2014-09-09', 8 FROM DUAL;
輸出:
ID 日期 星期 作業時間 WEEKLY_TIME 1 2014-09-01 00:00:00 2014-09-01 00:00:00 4 16.5 1 2014-09-03 00:00:00 2014-09-01 00:00:00 5.5 16.5 1 2014-09-04 00:00:00 2014-09-01 00:00:00 7 16.5 1 2014-09-09 00:00:00 2014-09-08 00:00:00 8 8 2 2014-09-04 00:00:00 2014-09-01 00:00:00 4 10 2 2014-09-02 00:00:00 2014-09-01 00:00:00 6 10
db<>在這里擺弄
uj5u.com熱心網友回復:
編輯:提交的答案沒有注意到“Oracle”標簽。否則,請在此處回答問題:Oracle SQL - 按周匯總和分組資料
Select employee_Id,
DATEPART(week, workday) as [Week],
sum (worktime) as [Weekly Hours]
from WORK
group by employee_id, DATEPART(week, workday)
https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=238b229156a383fa3c466b6c3c2dee1e
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/425308.html
