C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: データ抽出方法(SQL)


(過去ログ 46 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■24686 / inTopicNo.1)  データ抽出方法(SQL)
  
□投稿者/ チャージ (1回)-(2008/09/08(Mon) 11:58:29)

分類:[データベース全般] 

2008/09/08(Mon) 13:55:06 編集(投稿者)
2008/09/08(Mon) 13:54:48 編集(投稿者)

はじめまして
SQL文に詳しくない為、データ抽出方法で悩んでおります。
下らない質問かもしれませんが、宜しくお願いします。

[DB:POSTGRE 8.3.1]です。

テーブルに下記のようなデータが格納されており、
テーブルから結果となるようなデータを絞り込みたいのですが、
どのようなSQL文なら抽出可能でしょうか?
尚、わかっている条件は
ID=1, No=1, 日時='2008-09-08 16:%'です。
抽出結果には、
XXID毎にID=1, No=1で一致し、日時='2008-09-08 16:%'の一番早い時間を
抽出したいのですが可能でしょうか?

TABLE
--------------------------------------------------------------------------
XXID ID No 日時 項目1 項目2 項目3 ・・・
A 1 1 2008-09-08 16:10
A 1 1 2008-09-08 16:11
A 1 2 2008-09-08 16:12
A 1 3 2008-09-08 16:13
B 1 1 2008-09-08 16:20
B 1 1 2008-09-08 16:21
B 1 2 2008-09-08 16:22
B 1 3 2008-09-08 16:23
C 2 1 2008-09-08 16:10
C 2 1 2008-09-08 16:11
C 2 2 2008-09-08 16:12
C 2 3 2008-09-08 16:13

抽出結果
TABLE
--------------------------------------------------------------------------
XXID ID No 日時 項目1 項目2 項目3 ・・・
A 1 1 2008-09-08 16:10
B 1 1 2008-09-08 16:20

すいませんが、宜しくお願いします。

引用返信 編集キー/
■24688 / inTopicNo.2)  Re[1]: データ抽出方法(SQL)
□投稿者/ こくぶんまさひろ (8回)-(2008/09/08(Mon) 12:20:56)
こくぶんまさひろ さんの Web サイト
No24686 (チャージ さん) に返信

条件について確認です。

> わかっている条件は
> ID=1, No=1, 日時='2008-09-08 16:%'です。

この条件を満たすレコードを考えると、

> A 1 1 2008-09-08 16:10
> A 1 1 2008-09-08 16:11
> B 1 1 2008-09-08 16:20
> B 1 1 2008-09-08 16:21

の4件がヒットすると思います。
これは、提示された抽出結果と一致しませんが、

・他にも絞り込み条件がある
・抽出結果は上記4件が正解

のどちらでしょうか?

引用返信 編集キー/
■24690 / inTopicNo.3)  Re[2]: データ抽出方法(SQL)
□投稿者/ チャージ (2回)-(2008/09/08(Mon) 13:11:39)
No24688 (こくぶんまさひろ さん) に返信
こくぶんまさひろ様、返信ありがとうございます。

> これは、提示された抽出結果と一致しませんが、
>
> ・他にも絞り込み条件がある
> ・抽出結果は上記4件が正解
>
> のどちらでしょうか?
他にも絞込み条件があります。記入漏れでした。
条件の追加として、日時の早い項目(MIN(日時))を
XXIDの昇順で抽出したいのですが・・・。

宜しくお願いします。
引用返信 編集キー/
■24691 / inTopicNo.4)  Re[3]: データ抽出方法(SQL)
□投稿者/ たくボン (14回)-(2008/09/08(Mon) 13:17:30)
No24690 (チャージ さん) に返信
> ■No24688 (こくぶんまさひろ さん) に返信

> 他にも絞込み条件があります。記入漏れでした。
> 条件の追加として、日時の早い項目(MIN(日時))を
> XXIDの昇順で抽出したいのですが・・・。

ならばORDER BY句ですね。
1件だけ取得したいならPostgreではLIMITが使用できるので、LIMITを使えば問題ないと思います。
引用返信 編集キー/
■24696 / inTopicNo.5)  Re[4]: データ抽出方法(SQL)
□投稿者/ チャージ (3回)-(2008/09/08(Mon) 13:48:52)
No24691 (たくボン さん) に返信
たくボン様、返信ありがとうございます。

> ならばORDER BY句ですね。
> 1件だけ取得したいならPostgreではLIMITが使用できるので、LIMITを使えば問題ないと思います。

ORDER BY と LIMIT と OFFSET を使用したSQL文では期待している結果になりませんでした。
SQL文は下記の通りです。

SELECT * FROM TABLE
WHERE 日時 LIKE '2008-09-08 16:%' AND No = 1 AND ID = 1
ORDER BY 日時 ASC
LIMIT 2
OFFSET 0

すいませんが宜しくお願いします。
引用返信 編集キー/
■24703 / inTopicNo.6)  Re[5]: データ抽出方法(SQL)
□投稿者/ みきぬ (72回)-(2008/09/08(Mon) 14:56:47)
文章も書いてたんですが手違いで消してしまったので、手抜きですみません。

注意:
・Accessで作りました。
・日時をDateTimeで作ってしまったんで、日時のところの条件がちょっと違います。

SELECT
  TABLE.XXID,
  TABLE.ID,
  TABLE.[No],
  Min(TABLE.日時) AS 日時の最小
FROM
  [TABLE]
WHERE
  TABLE.日時 >= #9/8/2008 16:0:0# AND
  TABLE.日時 < #9/8/2008 17:0:0#
GROUP BY
  TABLE.XXID,
  TABLE.ID,
  TABLE.[No]
HAVING
  TABLE.ID = 1 AND
  TABLE.[No] = 1

引用返信 編集キー/
■24708 / inTopicNo.7)  Re[6]: データ抽出方法(SQL)
□投稿者/ チャージ (4回)-(2008/09/08(Mon) 15:59:34)
No24703 (みきぬ さん) に返信
みきぬ様、返信ありがとうございます。

SQL文を参考にデータを抽出したところ期待通りの結果が得られました。
ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -