date name

---- ----------
1/1 深田恭子
2/1 長谷川京子
3/1 伊東美咲
3/2 長谷川京子
3/3 松下奈緒
3/4 伊東美咲

3月1日以降に、初めて登場した人は何人か?
を求めるSQLを書ける方、先着1名様、100pt贈呈します。
結果は’2’ (伊東美咲と松下奈緒の2名。長谷川京子は3月1日以前にも登場しているのでカウントから除外)

下記2本、いずれもダメでした。
SELECT COUNT(`name`) FROM table WHERE NOT EXISTS (SELECT `name` FROM table WHERE `date` < ’2005-03-01’);

SELECT COUNT(`name`) FROM table WHERE `name` NOT IN (SELECT `name` FROM table WHERE `date` < ’2005-03-01’);

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/09/13 16:27:56
  • 終了:--

回答(9件)

id:nekonabe No.1

nekonabe回答回数2ベストアンサー獲得回数02005/09/13 16:45:59

ポイント15pt

URLはダミーです。


DBが分からないのでORACLE版ですが…

select count(distinct name) from table a

where not exists (select ’X’ from table b where date < ’2005/03/01’ and a.name = b.name)

id:radio3

やっと閲覧できました。

DBはMySQLですが、汎用的には無理なんですかね... いかにもありそうなパターンだと思ってました。

結果、エラーでした。

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ’exists (select ’X’ ...

ありがとうございました。

2005/09/14 00:11:22
id:kazz7 No.2

kazz7回答回数446ベストアンサー獲得回数142005/09/13 16:49:19

ポイント20pt

http://www.hatena.ne.jp/1126596476

人力検索はてな - date name ---- ---------- 1/1 深田恭子 2/1 長谷川京子 3/1 伊東美咲 3/2 長谷川京子 3/3 松下奈緒 3/4 伊東美咲 3月1日以降に、初めて登場した人は何人か? を求めるSQL..

select count(*)

from (select min(date) min_date, name

from table

group by name) tmp_tbl

where tmp_tbl.min_date > to_date(’2005-03-01’, ’YYYY-MM-DD’) ;

;


このSQL文で求められると思います。

id:radio3

申し訳ありませんが、エラーでした。

MySQL server version for the right syntax to use near ’select min(`date`) min_date, ...

phpMyAdminのSQL照会だからでしょうか...?

ありがとうございます。

2005/09/14 01:02:53
id:rhosoi No.3

rhosoi回答回数9ベストアンサー獲得回数02005/09/13 16:56:33

ポイント15pt

SELECT COUNT(DISTINCT ’name’) FROM table WHERE ’name’ NOT IN (SELECT DISTINCT ’name’ FROM table WHERE ’date’ < ’2005-03-01’;


DISTINCTのCOUNTが出来ない処理系だと駄目なので、そーいう場合はDISTINCT ’name’のレコード数を使えばいいかと

id:taknt No.4

きゃづみぃ回答回数13539ベストアンサー獲得回数11982005/09/13 17:03:42

ポイント15pt

select sum(1) - (select sum(1) from(

SELECT sum(1)

FROM tabl a

WHERE (((a.date)<#3/1/2005#)) group by a.name ))

from ( SELECT sum(1)

FROM tabl b group by b.name )


どのSQLかかかれてなかったので、 とりあえず ACCESSで 確認しました。


tableは tabl としてあります。

id:radio3

皆さんありがとうございます。

MySQLというかphpMyAdminがダメなんですかね...?

2005/09/14 01:09:08
id:mj99 No.5

mj99回答回数138ベストアンサー獲得回数382005/09/13 17:06:06

SELECT count(distinct `name`) FROM table WHERE `date` >= ’2005-03-01’


distinctで重複除外できます。

あと、不等号違いますね。

id:radio3

結果3で不正解

2005/09/14 01:11:16
id:mj99 No.6

mj99回答回数138ベストアンサー獲得回数382005/09/13 17:13:27

ポイント15pt

あー。連投です。申し訳ありません。


例にしてるのは、NOT EXISTSで3/1以前を除外しようとしたのですね。。よく読んでなかった。ごめんなさい


SELECT COUNT(`name`) FROM (SELECT distinct `name` FROM table WHERE `date` < ’2005-03-01’);

id:kuma00 No.7

kuma00回答回数11ベストアンサー獲得回数02005/09/13 17:30:59

ポイント15pt

http://www.hatena.ne.jp/1126596476#

人力検索はてな - date name ---- ---------- 1/1 深田恭子 2/1 長谷川京子 3/1 伊東美咲 3/2 長谷川京子 3/3 松下奈緒 3/4 伊東美咲 3月1日以降に、初めて登場した人は何人か? を求めるSQL..

これでどうでしょう

SELECT count(distinct ’name’) FROM ’table’

WHERE ’name’ NOT IN (SELECT ’name’ FROM ’table’ WHERE ’date’ < ’2005-03-01’)

id:radio3

皆さんありがとうございます。

MySQLだからダメのようですね。

下記1、2ともに○ですが、3にしたとたんエラーです。

1.

select * from table where name not in (’伊東美咲’)

2.

select name from table

3.

select * from table where name not in (

select name from table

)

2005/09/14 14:25:51
id:pm94 No.8

pm94回答回数2ベストアンサー獲得回数02005/09/14 18:05:10

ポイント10pt

http://www.excite.co.jp/?c=1

Excite エキサイト

■テスト

create table `table` (`date` date, `name` varchar(10));


insert into `table` values(’2005/01/01’,’a’);

insert into `table` values(’2005/02/01’,’b’);

insert into `table` values(’2005/03/01’,’c’);

insert into `table` values(’2005/03/02’,’b’);

insert into `table` values(’2005/03/03’,’d’);

insert into `table` values(’2005/03/04’,’c’);


■これで出来ます

select count(*) from (select distinct `name` from `table` where `date` >= ’2005/03/01’) as x;


----

MySQLってサブクエリに別名が必須だったのですね。。。。

id:radio3

ありがとうございます。

しかし、こちらではなぜか通りません。

上記のselect...も

下記のようなのさえ通りません。

select count(*) from( select `name` from `table`) as `x`;

MySQLのメッセージ -->

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ’select `name` from `table`) as `x`’ at line 1

嫌になってきましたね(^^; 皆さんすみません。

2005/09/14 23:33:07
id:pm94 No.9

pm94回答回数2ベストアンサー獲得回数02005/09/14 19:25:56

ポイント15pt

http://www.rakuten.co.jp/

【楽天市場】Shopping is Entertainment! : インターネット最大級の通信販売、通販オンラインショッピングコミュニティ

orz。。。。


>3月1日以前にも登場しているのでカウントから除外


質問良く読もう、、、


select count(*) from(

select distinct `name` from `table`

where `name` not in(select `name` from `table` where `date` < ’2005/03/01’)) as x;


count(*)

--------------------+

2


select @@version


@@VERSION

----------+

4.1.12-log


回答7についている、質問者コメント内の3番が通らないのはバージョンのせいなのかな


あ、ちなみに、

ここのSQL普通にコピーペーストすると、シングルクォートが全角になっているので使えません。半角に置き換えてください。

id:radio3

select @@version

4.0.22-standard-log

この程度のが通らないDBだった、ということですかね(:_;)

2005/09/14 23:38:13

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません