2016-07-01 15 views
0

によって私は私が持っている唯一の情報であるAccessデータベース内のテーブルがあります。MS Accessの計算秒時間

start_time (date & time); 
end_time (date & time); 
duration (int, seconds); 

私は私の出力を持っているために必要なものは、各時間のブラケットで過ごしたどのように多くの時間ですが。

一つの例:この例では

start_time: 2016/07/01 09:00:00 
end_time: 2016/07/03 09:00:00 

、ふり出力は次のようになります。事前に

Date  | Hour | Duration 
2016/07/01 9  3600 
2016/07/01 10 3600 
2016/07/01 11 3600 
2016/07/01 12 3600 
    ...  ... ... 
2016/07/03 8  3600 

感謝。あなたが唯一の完全な時間でカウントした場合

+0

'duration(int、seconds);'カラムの目的は何ですか?それは計算の役割を果たしますか? – Andre

+0

こんにちはAndre、その列を使用する目的はありません。期間フィールドは、end_time - start_time –

答えて

2

、これが行います。

PARAMETERS 
    StartDate DateTime, 
    EndDate DateTime; 
SELECT 
    DateValue(DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])) AS [Date], 
    Hour(DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])) AS [Hour], 
    DateDiff("s", 
     DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate]), 
     DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10)+1,[StartDate])) AS Duration 
FROM 
    MsysObjects AS Uno, 
    MsysObjects AS Deca 
GROUP BY 
    DateValue(DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])), 
    Hour(DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])), 
    DateDiff("s", 
     DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate]), 
     DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10)+1,[StartDate])), DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate]) 
HAVING 
    DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])<=[EndDate]; 

編集:

SELECT 
    DateValue(DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])) AS [Date], 
    Hour(DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])) AS [Hour], 
    DateDiff("s", 
     DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate]), 
     DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10)+1,[StartDate])) AS Duration 
FROM 
    MsysObjects AS Uno, 
    MsysObjects AS Deca, 
    Durations 
WHERE 
    DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])<=[EndDate] 
GROUP BY 
    DateValue(DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])), 
    Hour(DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])), 
    DateDiff("s", 
     DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate]), 
     DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10)+1,[StartDate])); 

へ:あなたが直接あなたのテーブル(デュレーション)を含めることができ

分および分を尊重します:

SELECT 
    DateValue(DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])) AS [Date], 
    Hour(DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])) AS [Hour], 
    DateDiff("s", 
     IIf(DateDiff("h",[StartDate],DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate]))=0, 
      [StartDate], 
      DateValue([StartDate])+TimeSerial(Hour([StartDate])+10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),0,0)), 
     IIf(DateDiff("h",[EndDate],DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate]))=0, 
      [EndDate], 
      DateValue([StartDate])+TimeSerial(Hour([StartDate])+10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10)+1,0,0))) AS Duration 
FROM 
    MsysObjects AS Uno, 
    MsysObjects AS Deca, 
    Durations 
WHERE 
    DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])<[EndDate] 
GROUP BY 
    DateValue(DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])), 
    Hour(DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate])), 
    DateDiff("s", 
     IIf(DateDiff("h",[StartDate],DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate]))=0, 
      [StartDate], 
      DateValue([StartDate])+TimeSerial(Hour([StartDate])+10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),0,0)), 
     IIf(DateDiff("h",[EndDate],DateAdd("h",10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10),[StartDate]))=0, 
      [EndDate], 
      DateValue([StartDate])+TimeSerial(Hour([StartDate])+10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10)+1,0,0))); 
+0

の間の違いです。これは完璧です!最後の1つの質問ですが、このコードをテーブルに関連付けるにはどうすればいいですか(logintimeと呼ぼう)、開始日と終了日があります。 –

+0

はい、編集を参照してください、私はテーブルの期間を... – Gustav

+0

ありがとう、私はほとんどそこにあります。今私が得るのは、私が望むような持続時間ですが、x時間とy時間の間に時間がないときは、自動的に3600になります(ゼロになるはずです)。たとえば、最後のやりとりが19:00まで、19:00から翌日になると、クエリには1時間に3600回になります。それを0(ゼロ)に変更することはできますか?あなたの忍耐のためにもう一度おねがいします:) –

0

私が望むテーブルとその実行を追加できました。しかし、私は最初の質問をしたときに私ははっきりしないかもしれません。

私が望むのは、時間別の内訳です。あなたが私に与えているクエリは、開始時間と終了日のどちらの時間であっても、継続時間として常に3600を返します。

これは私が私のテーブルに持っている1つのレコードの本当の例です。このレコードに

campaign agent start_time    end_time 
279   542 23/05/2016 17:05:21 24/05/2016 09:58:54 

、私が欲しいのはこのことを知っている:

date  hour duration 
23/05/2016 17 3279 
23/05/2016 18 3600 
23/05/2016 19 3600 
23/05/2016 20 3600 
23/05/2016 21 3600 
23/05/2016 22 3600 
23/05/2016 23 3600 
24/05/2016 0 3600 
24/05/2016 1 3600 
24/05/2016 2 3600 
24/05/2016 3 3600 
24/05/2016 4 3600 
24/05/2016 5 3600 
24/05/2016 6 3600 
24/05/2016 7 3600 
24/05/2016 8 3600 
24/05/2016 9 3534 

最初にご注意ください最後の行にはstart_timeと正確な次の時間の違いがあります。

+0

元々は言及していませんでしたが、編集を参照してください。それは、1秒または0秒の持続時間および100時間までの(そのまま)動作する。 – Gustav

関連する問題