2011-11-01 16 views
0

私は、勤務時間について、FireBirdを使用したPHPプロジェクトに取り組んでいます。基本的には、すべての労働者はカードを持っています。カードは建物に出入りする際に刻印します。各スタンプは、日付(DATUM)、id(NREC)、user_id(NCODE)のARCHIVEテーブルに記録されます。私がしなければならないことは、毎日の最後と最初の時間を得て、時間を計算することです。だから私はこれを使用し、最初と最後を取得しますFireBird - 2つのタイムスタンプ間の時間差を計算しますか?

SELECT MAX(NREC) 
FROM ARCHIVE 
WHERE DATUM BETWEEN '$day.$month.$year' AND '$day+1.$month.$year'; 

SELECT MIN(NREC) 
FROM ARCHIVE 
WHERE DATUM BETWEEN '$day.$month.$year' AND '$day+1.$month.$year'; 

私は変数に最大値と最大値の両方を保存し、その後、私は両方の日付を選択して計算します。しかし、それは4つのクエリです。簡単で簡単な方法はありますか? また、DATUMはタイムスタンプ

+0

私はあなたの質問は、あなたが正確に必要な情報について、もう少し詳細を必要だと思います。 –

答えて

0

であることを試みることができる:

SELECT DATUM FROM ARCHIVE JOIN (
    SELECT MIN(NREC) AS minid, MAX(NREC) as maxid FROM ARCHIVE 
    WHERE DATUM DATUM BETWEEN '$day.$month.$year' AND '$day+1.$month.$year' 
    AND NCODE = user_id) 
as mm ON mm.maxid = ARCHIVE.NREC OR mm.minid=ARCHIVE.NREC 

をFirebirdのは、MySQLのようなものを動作する場合、これは次の2つのタイムスタンプを与える必要があります。

+0

それは問題です - FireBirdはMySQLのようなものではありません。なぜ私は問題を抱えていたのですか編集: – ItsGreg

0

SELECT DATUM, MAX(NREC), MIN(NREC) 
FROM ARCHIVE 
GROUP BY DATUM 

については、必要に応じて右の日付範囲の条件と組み合わせますか?

もちろん

EDIT DATUMがタイムスタンプであるとき、それが仕事に行くのではありません:/

関連する問題