2014-10-27 68 views
1

對不起,我想不出一個更好的標題。選擇最小,最大和一行有一個特殊的FK

我有一個表是這樣的:

... 
DATE (datetime) 
PROJECT (number - this is a FK to projects table) 
FROM (datetime) 
TO (datetime) 
... 

,我需要選擇最低FROM值的每一天(如時間一天的工作開始了),最大的價值(爲S的工作時間一天結束)和從和爲標記爲「BREAK」一個項目,所以輸出會是這樣的:

date  from to  break from break to time spent 
1.1.2011 9:00 17:00 12:00  13:00 7.0 

這在某種程度上可能的一個選擇呢?到目前爲止,我有這樣的:

SELECT 
    MIN("FROM_X") AS "FROM", 
    MAX("TO_X") AS "TO", 
    (MAX("TO_X") - MIN("FROM_X"))*24 AS TIME_SPENT, 
    "DAY" 
FROM ATTENDANCE_HOURS 
GROUP BY DAY 

它需要開始和一天的工作結束的照顧,但我不知道如何具有斷線的事情。

+0

您的attendance_hours表的PK和可能英國是什麼?是日期(這將是一個糟糕的選擇)或日期?爲什麼需要在一天中進行分組/爲什麼在attendance_hours每天有多個記錄 - 他們是否是每個項目?我不完全瞭解這些項目是如何實現的? – Tom 2014-10-28 07:56:40

+0

PK是一個數字「ID」。我沒有提及它,它似乎不相關。是的,該列名爲DAY。那麼,它代表了員工在項目上花費的時間 - 所以,每個記錄都代表在一天內花費在一個項目上的X小時。從那以後,我需要提取每個人何時開始和離開工作,以及什麼時候他有休息時間(也表示爲一個項目)。 – Lea 2014-10-29 09:33:45

回答

2

如果「破發」的項目,每天只出現一次,你可以使用:

SELECT 
    MIN("FROM_X") AS "FROM", 
    MAX("TO_X") AS "TO", 
    max(case when project = 'break' then from_x else null end) as "BREAK FROM", 
    max(case when project = 'break' then to_x else null end) as "BREAK TO", 
    (MAX("TO_X") - MIN("FROM_X"))*24 AS TIME_SPENT, 
    "DAY" 
FROM ATTENDANCE_HOURS 
GROUP BY DAY 

如果沒有,您需要選擇適當的聚合功能。您也可以使用此解決方案從前兩列中排除您的「休息」項目:

SELECT 
    max(case when project <> 'break' then from_x else null end) as "FROM", 
    max(case when project <> 'break' then to_x else null end) as "TO", 
+0

正是我需要和拯救我的一天,我可以給你我的長子嗎? – Lea 2014-10-29 09:53:59

相關問題