1

犬のおもちゃのライブラリを管理するデータベースがあります。

このdog_toy_historyテーブルは、犬がおもちゃライブラリーからチェックアウトしたおもちゃを追跡します。犬は、おもちゃが返されたときにのみ新しいおもちゃを持つことができます。犬は一度に 1 つのおもちゃしか持てません。

CREATE TABLE `dog_toy_history` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `dog_id` int(10) unsigned NOT NULL,
  `toy_id` varchar(8) NOT NULL,
  `created_date` datetime NOT NULL,
  PRIMARY KEY (`id`)
)

INSERT INTO `dog_toy_history`
  (`id`,`dog_id`,`toy_id`,`created_date`) 
VALUES  
  (1,1,'a','2013-07-05 00:00:00'),
  (2,2,'b','2013-07-15 00:00:00'),
  (3,3,'c','2013-07-20 00:00:00'),
  (4,1,'d','2013-07-25 00:00:00'),
  (5,2,'a','2013-08-05 00:00:00'),
  (6,1,'b','2013-08-10 00:00:00'),
  (7,2,'d','2013-08-15 00:00:00'),
  (8,1,'a','2013-08-20 00:00:00');

dog_id と日付範囲を指定して、その期間中に犬が持っていたおもちゃと、おもちゃを持っていた日付と日付を特定できるようにしたいと考えています。

クエリ例 1

set @dog_id = 1;
set @start_date = '2013-07-05';
set @end_date = '2013-07-25';

<run special query> ... desired result:

    toy_id, start_date, end_date
    a       2013-07-05  2013-07-25
    d       2013-07-25  2013-07-25

クエリ例 2

set @dog_id = 1;
set @start_date = '2013-07-05';
set @end_date = '2013-08-19';

<run special query> ... desired result:

    toy_id, start_date, end_date
    a       2013-07-05  2013-07-25
    d       2013-07-25  2013-08-10
    b       2013-08-10  2013-08-19

クエリ例 2

set @dog_id = 2;
set @start_date = '2013-07-01';
set @end_date = '2013-09-01';

<run special query> ... desired result:

    toy_id, start_date, end_date
    b       2013-07-15  2013-08-05
    a       2013-08-05  2013-08-15
    d       2013-08-15  2013-09-01
4

1 に答える 1