2017-08-30 14 views
1

私はcreated_atが現在の過去またはx週間以内のレコードを照会することに関して問題を抱えて戦ってきました。今日は水曜日ですから、月曜日から深夜まで、x = 1の場合は今までです。x> 1の場合は、現在の週、今日まで、または過去の週を探していますが、定期的ではありませんinterval '1 week'それは水曜日から水曜日まで私を受け取り、私は「全体」の週だけを見ています。過去x週のレコードを取得する

私はインターバルソリューションを試しましたが、WHERE created_at > (CURRENT_DATE - INTERVAL '5 week')のようなものも試しました。 私は実際に他のバックエンドロジックを使ってクエリを構築しているので、日、月、年などの両方で動作するソリューションが望ましいでしょう。私は 『X期間』バックを作成されているすべてを探す」ための一般的なクエリを探しています


編集:

最後の時以来、私はRubyでこれを実装しましたHOURを使用する際にRailsアプリケーションに。これは、構築された私のテストケースで正しく動作HOUR以外のすべて(MONTH、DAY、およびYEAR)

SELECT "customer_uses".* 
FROM "customer_uses" 
WHERE (customer_uses.created_at > DATE_TRUNC('MONTH', TIMESTAMP '2017-09-17T16:45:01+02:00') - INTERVAL '1 MONTH') 

のために働いている。いくつかの問題を引き起こしている。(チェこれのckingカウント)。 TIMESTAMPはDateTime.nowによって生成され、私のテストケースが "時間移動"テストの時間オーバーライドを処理するようにします。したがって、組み込み関数を使用しないでください。

(私はいくつかの余分なWHEREコールを取り除きましたが、これは無関係であるべきです)。

SELECT "customer_uses".* 
FROM "customer_uses" 
WHERE (customer_uses.created_at > DATE_TRUNC('HOUR', TIMESTAMP '2017-09-17T16:45:21+02:00') - INTERVAL '1 HOUR') 
+1

'WHERE created_at>(CURRENT_DATE - INTERVAL '5 weeks')の何が問題なのですか?任意の期間(例:月、週)のクエリをいくつか求めていますか? –

+0

おそらく: 'date_trunc( 'week'、created_at)> date_trunc( 'week'、current_date) - 間隔 '5 week'' –

+0

私は今週の初めを使って探しています。私はクエリが "同じ"であろうと思います。なぜなら、それは 'インターバル' 5月 '単純に、右@TimBiegeleisenですか? –

答えて

1

あなたの現在の提案クエリがほとんどです:私はそうのように、上記のようにHOUR代わりMONTHのための補間された文字列でそれを使用しているようHOURが動作しないのはなぜ

は、私にとっては謎であります右、それは代わりに、週の開始の現在の日付を使用していることを除い:

SELECT * FROM your_table WHERE created_at > (CURRENT_DATE - INTERVAL '5 week') 

代わりに、我々は後方5週間の間隔をチェックしますが、現在の週の開始からすることができます

SELECT * 
FROM your_table 
WHERE created_at > DATE_TRUNC('week', CURRENT_DATE) - INTERVAL '5 week'; 

上記のクエリを他の期間のテンプレートとして使用できるはずです(例:一定の数ヶ月。ユニットはDATE_TRUNCWHERE句の間に置き換えてください。

+1

あなたの答えは 'HOUR'を除いて完全に動作します。 'DATE_TRUNC( 'hour'、TIMESTAMP '....')'を指定すると、HOURでは機能しませんが、DAY、MONTH *および* YEARでは機能します。私は今あなたの答えを受け入れました。私は元の答えで時間を言及しなかったので、そうでなければ魅力として働きます。 –

+0

@FrederikSpang私はupvoteに感謝します。 –

+0

しばらくお待ちください –