重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

以下の様なデータが、データベースに入っています。

table 映画データ

映画館    映画名     日付    メモ
-------------------------------------

バルト9  「タイタニック」  2013-10-16  ※2000円
バルト9  「E.T」       2013-10-19  ※子ども向け
渋谷東急 「007」      2013-10-17  ※R指定
バルト9  「タイタニック」  2013-10-17  ※2000円
渋谷東急 「007」      2013-10-18  ※R指定
渋谷東急 「アメリ」     2013-10-20  ※女性向け
バルト9  「E.T」       2013-10-18  ※子ども向け
バルト9  「タイタニック」  2013-10-15  ※2000円
渋谷東急 「007」      2013-10-19  ※R指定


これを映画館 >映画名 > 日付(初めから終わりまでつなげる)の順番で抜き出したいです。
以下のように。


バルト9  「タイタニック」  2013-10-15 - 2013-10-17  ※2000円
バルト9  「E.T」       2013-10-18 - 2013-10-19  ※子ども向け
渋谷東急 「007」      2013-10-17 - 2013-10-19  ※R指定
渋谷東急 「アメリ」     2013-10-20           ※女性向け

このようなSELECT文はどう書けばよいでしょうか。
すみませんがよろしくお願いいたします

A 回答 (4件)

select


映画館
, 映画名
, case when min(日付) = max(日付)
then min(日付)
when min(日付) <> max(日付)
then min(日付) + ' - ' + max(日付)
end
,max(メモ)
from 映画データ
group by 映画館,映画名
order by 映画館,映画名

ご参照ください。
    • good
    • 0
この回答へのお礼

CASE文で非常にシンプルに回答頂きまして大変役に立ちました。
他の方も丁寧にお応えいただいて心苦しいのですが、
ベストアンサーとさせていただきます。

お礼日時:2014/02/13 16:46

#2です


コピペミスみたいなので再投稿します

//データ作成

create table movie(m_id int,m_name varchar(100),m_memo text);
insert into movie values(1,'タイタニック','※2000円'),(2,'E.T','※子ども向け'),(3,'007','※R指定'),(4,'アメリ','※女性向け');

create table theater(t_id int, t_name varchar(20));
insert into theater values(1,'バルト9'),(2,'渋谷東急');

create table schedule(t_id int,m_id int,s_date date);
insert into schedule values(1,1,'2013-10-16'),(1,2,'2013-10-19'),(2,3,'2013-10-17'),(1,1,'2013-10-17'),(2,3,'2013-10-18'),(2,4,'2013-10-20'),(1,2,'2013-10-18'),(1,1,'2013-10-15'),(2,3,'2013-10-19');

//スケジュール一覧
select t_name,m_name,s_date,m_memo
from schedule as s
inner join movie as m on s.m_id=m.m_id
inner join theater as t on s.t_id=t.t_id;

//スケジュール集計
select t_name,m_name,min(s_date) as start,if(count(s_date)=1,null,max(s_date)) as end,m_memo
from schedule as s
inner join movie as m on s.m_id=m.m_id
inner join theater as t on s.t_id=t.t_id
group by t_name,m_name;
    • good
    • 0
この回答へのお礼

お返事が遅れて誠に申し訳ありません。
二度も丁寧にご回答ありがとうございました。
正規化については不勉強で、おかげさまで今勉強しています。
丁寧なご回答ありがとうございました。

お礼日時:2014/02/13 16:44

正規化について学習なさった方がよいかと



//データ作成
create table eiga(place varchar(20),title varchar(100),day date,memo text);
insert into eiga values('バルト9','タイタニック','2013-10-16','※2000円'),('バルト9','E.T','2013-10-19','※子ども向け'),('渋谷東急','007','2013-10-17','※R指定'),('バルト9','タイタニック','2013-10-17','※2000円'),('渋谷東急','007','2013-10-18','※R指定'),('渋谷東急','アメリ',' 2013-10-20','※女性向け'),('バルト9','E.T','2013-10-18','※子ども向け'),('バルト9','タイタニック','2013-10-15','※2000円'),('渋谷東急','007','2013-10-19','※R指定');

create table movie(m_id int,m_name varchar(100),m_memo text);
insert into movie values(1,'タイタニック','※2000円'),(2,'E.T','※子ども向け'),(3,'007','※R指定'),(4,'アメリ','※女性向け');

create table theater(t_id int, t_name varchar(20));
insert into theater values(1,'バルト9'),(2,'渋谷東急');

//スケジュール一覧
select t_name,m_name,s_date,m_memo
from schedule as s
inner join movie as m on s.m_id=m.m_id
inner join theater as t on s.t_id=t.t_id;

//スケジュール集計
select t_name,m_name,min(s_date) as start,if(count(s_date)=1,null,max(s_date)) as end,m_memo
from schedule as s
inner join movie as m on s.m_id=m.m_id
inner join theater as t on s.t_id=t.t_id
group by t_name,m_name;
    • good
    • 0
この回答へのお礼

お返事が遅れて誠に申し訳ありません。
正規化については不勉強で、おかげさまで今勉強しています。
丁寧なご回答ありがとうございました。

お礼日時:2014/02/13 16:43

select 映画館,映画名,min(日付),max(日付),max(メモ) from 映画データ group by 映画館,映画名



でよろしいかと。
    • good
    • 0
この回答へのお礼

お返事が遅れて誠に申し訳ありません。
ご協力誠にありがとうございました。
group byの意味が未だに掴みきれてませんでした。

お礼日時:2014/02/13 16:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す