2011-09-27 11 views
0

プロジェクトあたりの作業時間を算出するために、私はこのようなMySQLのテーブルにEMPIDを入力PHPフォーム、projectNumber、およびクロックイン/クロックアウトタイムスタンプを持っている:どのように従業員

何の評判を持っていない、私は画像を投稿し、ので、ここで見てみることはできません。 screenshot http://mailed.in/timecard/ss2.jpg

私は、MySQLで完全にこれを行うことができます:私はこのようになりますレポートを生成する際に助けが必要 screenshot http://mailed.in/timecard/ss1.jpg

?どうやって?

+0

あなたはどのように彼らはすべてのクロックでのクロック・アウトを持っていることを確認しますか。 –

+0

私は確認していません。彼らがクロックアウトしていない場合、レコードは表示されません。 –

+0

さて、プロジェクトと一致する前の行と行を関連付けることができます。次に、日付関数を使用して差分を取得します。しかし、私の恐れは、データが欠けていると、(潜在的に)物事が時間のためにその日に入るのを見ることになります。また、1つのクロックが入っていない/今後のエントリを取り消してしまいます(そのあとで、outからinに切り替えることになります) –

答えて

0

これはあなたを助けることがあります。

SELECT 
    empID AS EmpID, 
    projectNumber AS ProjectNumber, 
    DATE(clocktime) AS StartDate, 
    TIMEDIFF(
     (SELECT max(clocktime) from tableName where DATE(`clocktime`) = CURDATE()), 
     (SELECT min(clocktime) from tableName where DATE(`clocktime`) = CURDATE()) 
    ) AS WorkHours 
FROM `tableName` 
WHERE 
DATE(`clocktime`) = CURDATE() 
GROUP BY empID 
0

は、この文字列で検索してください -

CREATE TABLE table_proj (
    empid INT(11) DEFAULT NULL, 
    projectnumber INT(11) DEFAULT NULL, 
    clocktime DATETIME DEFAULT NULL 
); 

INSERT INTO table_proj VALUES 
    (1, 1, '2011-09-27 10:02:22'), 
    (1, 1, '2011-09-27 11:17:32'), 
    (2, 2, '2011-09-27 11:34:13'), 
    (3, 3, '2011-09-27 11:01:21'), 
    (3, 3, '2011-09-27 13:36:28'), 
    (2, 2, '2011-09-27 13:55:39'), 
    (4, 4, '2011-09-27 14:25:07'); 

SELECT 
    empid, projectnumber, MIN(clocktime) startdate, TIMEDIFF(MAX(clocktime), MIN(clocktime)) workhours 
FROM 
    table_proj 
GROUP BY 
    empid, projectnumber 
HAVING 
    COUNT(*) = 2; 

+-------+---------------+---------------------+-----------+ 
| empid | projectnumber | startdate   | workhours | 
+-------+---------------+---------------------+-----------+ 
|  1 |    1 | 2011-09-27 10:02:22 | 01:15:10 | 
|  2 |    2 | 2011-09-27 11:34:13 | 02:21:26 | 
|  3 |    3 | 2011-09-27 11:01:21 | 02:35:07 | 
+-------+---------------+---------------------+-----------+ 
関連する問題