2013 年 1 月 15 日から 2013 年 2 月 3 日までという 2 つの特定の日付の間にレンタルを行っている人がいます。私が担当しているのは、毎月のアクティブなレンタルの数に関する「アクティブな」レポートを表示することです。たとえば、これは 1 月のカウントと 2 月のカウントに表示されます。
これに関する助けをいただければ幸いです。私は同様のものを探しましたが、何も見つかりませんでした。私のSQLに関する知識は、主に単純な追加/変更/削除コードに関するものです。
SELECT * FROM `rentals` WHERE `date` BETWEEN '2013-03-04' AND '2013-04-04'
明らかに、テーブル名と列名を独自のものに置き換えてください...これはMySQLです。投稿時に使用しているDBソフトウェアを指定していませんでした。
2 つの日付の間で「アクティブ」なレコードを見つける一般的な方法は次のようになります。
...
WHERE startDate <= @periodEnd AND endDate >= @periodStart
各月のアクティブを見つけたい場合は、月のリストから始めて、それらをアクティビティ レコードと比較する必要があります。毎月の始まりがあると仮定しましょう。
select months.yyyymm, count(*) as NumActives
from (select distinct to_char(startdate, 'yyyy-mm') as yyyymm
from activity
) as months join
activity a
on yyyymm between to_char(a.startdate, 'yyyy-mm') and to_char(a.enddate, 'yyyy-mm')
group by months.yyyymm
Oracle/Postgres 関数to_char()
を使用して、日付を年月表現に変換しました。他のデータベースには、同じ目標を達成する別の方法があります。