2011-06-14 15 views
1

私はテーブルとクエリをクエリする必要があります。ユーザー定義の期間は分または時間の整数です。 1つの前提は、選択された期間が午前12時に開始されるということです(それが意味をなさない場合)。つまり、ユーザーがレコードを15分ずつグループ化することを選択した場合、午前12時07分に開始する15分ごとにグループ化を開始することは許可されません。グループ化の開始点として、自動的に午前12:00を想定/使用します。他の期間でも同じです。n分または時間でグループ化する

このために独自の関数を作成する必要はありますか?パフォーマンスの問題を抱かないようにするために、他の方法や制限を使用する予定なので、パフォーマンスについてはあまり心配していません。私はこの問題を考えていないが、私はbegindatetimeに私のグループ化をベースとenddatetimeを無視することを計画しない機能を使用する場合は

timeentry 
--entryid   (autonumber) 
--begindatetime (datetime) 
--enddatetime  (datetime) 

私のテーブルは次のようになります。

私はMS Accessを使用していますが、可能であれば私の解決策をSQL ServerとMySQLと互換性のあるものにしたいと思います。しかし、私の主な焦点は今のところMS Accessだけです。

+0

見たことがありますか? – Fionnuala

+0

すべてのbegindatetime値の日付部分としてDec 30 1899がありますか? – HansUp

+0

HansUp、実際の現在の日付と時刻の値ではありません。 – HK1

答えて

1

もう少し前に同様の質問に答えましたが、これはここで助けになるようです。 Here's the answer

+0

あなたの解決策は1分を15秒の間隔で4分の1に分けるようです。あなたはこれが15分の解像度を与えることを示します。私は何かを誤解していますか? – HK1

+0

@ HK1分値(60)を15で除算し、4つの可能な値を与えます。分が35だった場合は35/15 = 2となりますので、15分間隔でグループ分けされ、計算値は0〜3になります。 –

2

Partition()関数がここで役に立つと思われます。

あなたのコードは、ユーザーの選択肢(1つの日付のbegindatetime値にクエリを制限したいと仮定しています)、時間単位、およびグループ間隔に基づいてSELECT文を作成します。

2011年6月14日は、日付、分、時間単位、および間隔として15分になります。

SELECT 
    Partition(elapsed,0,1440,15) AS time_block, 
    q.id, 
    q.begindatetime 
FROM 
    [SELECT 
     t.id, 
     t.begindatetime, 
     TimeValue(t.begindatetime) * 1440 AS elapsed 
    FROM tblHK1 AS t 
    WHERE 
     t.begindatetime>=#2011-06-14# 
     And t.begindatetime<#2011-06-15# 
    ]. AS q 
ORDER BY q.begindatetime; 

あなたがどれくらい好きになるかわかりませんが、ここにいくつかの出力例があります:

time_block id begindatetime 
    60: 74 1 6/14/2011 1:06:05 AM 
555: 569 3 6/14/2011 9:15:00 AM 
1395:1409 4 6/14/2011 11:15:00 PM 

time_block列はあまりユーザーフレンドリーではありません。

+1

+1私は実際にスティーブがより良い答えを持っていると思っています。 Partition()関数に渡します。私は実際に私の頭の上からそれを使う時間を考えることはできませんが、それはちょうど良い状況では非常に貴重なことができるようです。 – mwolfe02

+0

@ mwolfe02右。パーティション()はしばしば見落とされているようです。 – HansUp

+0

+1は、Partition()の実際の使用を把握するためのものです。私はそれ自身では部分的ですが、それを使うのに何も見つけたことはありません。 –

0

私はあなたが欲しいものはかなりわかりませんが、ここでは1人の考えている:あなたはDATEDIFFで

SELECT DateDiff("n",CDate("00:00"),[BeginDateTime])\15 AS No15s, 
     (DateDiff("n",CDate("00:00"),[BeginDateTime])\15)*15 AS NoMins, 
     Count(Table1.BeginDateTime) AS [Count] 
FROM Table1 
GROUP BY DateDiff("n",CDate("00:00"),[BeginDateTime])\15, 
     (DateDiff("n",CDate("00:00"),[BeginDateTime])\15)*15; 
関連する問題