特定のタイムシフトで働くためにサインアップした人々を示す「Volunteers」と呼ばれるmysqlテーブルがあるとしましょう。
Volunteers
==============
**UserId** int
**StartTime** datetime
**EndTime** datetime
このテーブルに次のレコードが含まれているとしましょう。
(1, '2012-01-01 00:00:00', '2012-01-01 01:00:00')
(2, '2012-01-01 00:00:00', '2012-01-01 00:30:00')
(3, '2012-01-01 00:30:00', '2012-01-01 01:00:00')
(4, '2012-01-01 00:00:00', '2012-01-01 00:15:00')
(5, '2011-12-31 23:00:00', '2012-01-01 02:00:00')
(6, '2012-01-01 00:00:00', '2012-01-01 00:00:30')
(7, '2012-01-01 00:00:00', '2012-01-01 00:40:00')
(8, '2012-01-01 00:20:00', '2012-01-01 01:00:00')
ユーザーが00:00:00から01:00:00まで作業するようにサインアップしたこのテーブルのすべてのレコードをカウントしたいのですが、このカウントには、この目的のタイムシフトに集約できるタイムシフトも含めます。
たとえば、上記の例を使用すると、理想的なSQLクエリは4を返します。
説明:
ユーザー1は、希望するシフト全体を実行するようにサインアップしているため、カウントに1が追加されます。
ユーザー2と3は、目的のタイムシフトに集約される作業タイムシフトにサインアップしているため、カウントに1が追加されます。
ユーザー4には、目的のタイムシフトをカバーするために別のユーザーのタイムシフトと集約できないタイムシフトがあるため、これはカウントに追加されません。
ユーザー5は、必要なタイムシフト全体をカバーするため、カウントに1が追加されます。
ユーザー6には、ユーザー8のタイムシフトと集約して目的のタイムシフトをカバーできるタイムシフトがあるため、カウントに1が追加されます。
ユーザー7には、ユーザー8のタイムシフトと集約して目的のタイムシフトをカバーできるタイムシフトがありますが、ユーザー8がすでにユーザー6と統合して目的のタイムシフトを生成している場合は、これをカウントに含めないでください。したがって、これはカウントに追加されません。
したがって、カウントは4になります。
これをどのように行いますか?これも可能ですか?