2016-11-03 16 views
0

セルフ・ジョインをしていますが、日付でそれを行うのに問題があります。私は月の間隔(mm/dd/yyyy)(1/1/2006、2/1/2006、...)とさまざまな数値の数値列を日付の列にしています。下記のコードを参照してください...参照日2ヶ月前にアクセスSQL

SELECT t.ADate, 
     Sum(pre.liquid)/3 AS IP90 
    FROM [Table2] t 
    LEFT JOIN [Table2] pre ON pre.ADate >= (t.ADate -3) 
    AND pre.ADate <= t.ADate 
GROUP BY t.ADate; 

私は、現在の日付と現在の日付の2ヶ月前のレコードの平均を取っています。したがって、2006年5月1日には、2006年3月1日、2006年4月1日、および5/1/2006の平均液体量が必要です。私のコードでどうすればいいですか?ありがとうございました。

+0

は、「3/1/2006」「1月3日」または「3月1日」ですか?それは、 't.ADate -3'が何をするのかと何が期待されるのかに影響します。 – Brad

+0

3/1/2006は3月1日になります。 – PVic

答えて

1

クエリで日付を指定できますか?また、Accessには平均的な機能があると私は信じています。

SELECT AVG(pre.liquid) As IP90 
FROM [Table2] t 
LEFT JOIN [Table2] pre 
    ON pre.ADate = t.ADate 
WHERE t.ADate BETWEEN '3/1/2006' AND '5/1/2006'; 

日付の値によっては、少し余裕を持たなければならない場合があります。

+0

私は短いエントリーのリスト(私は200,000以上のエントリーを持っています)で走ることができました。スピードアップに役立ったAVG機能を使用しました。私は実際に私のON声明を変更してpre.ADate> =(t.ADate-61) AND ...を61で引いたものを61日(2ヶ月)戻してみました。あなたの提案をありがとう。 – PVic

+1

@ user3827129あなたはまた、3ヶ月は必ずしも61日ではないと考えるかもしれません。たぶん 'DateAdd(" m "、-3、t.ADate)'が有用だろう。 – BJones

関連する問題