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

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

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

Re[4]: SQLにて指定日付以前、かつ最新のデータを抽出したい。


(過去ログ 176 を表示中)

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

■101309 / inTopicNo.1)  SQLにて指定日付以前、かつ最新のデータを抽出したい。
  
□投稿者/ ステ (1回)-(2023/02/01(Wed) 20:44:21)

分類:[.NET 全般] 


VB.NET(VisualStudio2019)で開発
ACCESS MDB使用

以下のTBLとSQLで、各名前の最新データを抽出していました。

テーブルT1
名前 日付 回数
田中 2023/1/12 3
田中 2022/9/15 1
田中 2022/8/14 2
田中 2022/1/15 1
鈴木 2023/1/16 4
鈴木 2022/9/17 2
鈴木 2022/5/28 3
鈴木 2022/4/19 5
佐藤 2023/1/20 2
佐藤 2022/8/21 3
佐藤 2022/6/22 5

Select
*
FROM T1 As A
WHERE 日付 = (
Select MAX(日付)
FROM T1 As B
WHERE A.名前 = B.名前
)

結果
名前 日付 回数
田中 2023/1/12 3
鈴木 2023/1/16 4
佐藤 2023/1/20 2

ここに、指定日付以前の、最新日付データを抽出したいのですが、
MAX関数の日付を、指定日以前のデータをセットするには
どうしたらいいでしょうか?

下記のデータを抽出したいと思います。
指定日 2022/10/01 以前の最新データ

名前 日付 回数
田中 2022/9/15 1
鈴木 2022/9/17 2
佐藤 2022/8/21 3

以上 よろしくお願いします。


引用返信 編集キー/
■101310 / inTopicNo.2)  Re[1]: SQLにて指定日付以前、かつ最新のデータを抽出したい。
□投稿者/ 魔界の仮面弁士 (3553回)-(2023/02/01(Wed) 20:55:56)
No101309 (ステ さん) に返信
> ACCESS MDB使用
> 下記のデータを抽出したいと思います。
> 指定日 2022/10/01 以前の最新データ

Access SQL でいうと、こうかな。

PARAMETERS 指定日 DATE;
SELECT * FROM T1 AS A WHERE 日付 = (
SELECT MAX(日付) FROM T1 AS B
WHERE A.名前 = B.名前 AND B.日付 <= 指定日);



ADO.NET から呼ぶ場合は、OleDbCommand に対して
SELECT * FROM T1 AS A WHERE 日付 = (
SELECT MAX(日付) FROM T1 AS B
WHERE A.名前 = B.名前 AND B.日付 <= ?)
を指定して、日付パラメーターを OleDbParameter の
Value などから与えてみてください。
引用返信 編集キー/
■101311 / inTopicNo.3)  Re[2]: SQLにて指定日付以前、かつ最新のデータを抽出したい。
□投稿者/ ステ (2回)-(2023/02/01(Wed) 22:57:50)
No101310 (魔界の仮面弁士 さん) に返信
> ■No101309 (ステ さん) に返信
>>ACCESS MDB使用
>>下記のデータを抽出したいと思います。
>>指定日 2022/10/01 以前の最新データ
>
> Access SQL でいうと、こうかな。
>
> PARAMETERS 指定日 DATE;
> SELECT * FROM T1 AS A WHERE 日付 = (
> SELECT MAX(日付) FROM T1 AS B
> WHERE A.名前 = B.名前 AND B.日付 <= 指定日);
>
>
>
> ADO.NET から呼ぶ場合は、OleDbCommand に対して
> SELECT * FROM T1 AS A WHERE 日付 = (
> SELECT MAX(日付) FROM T1 AS B
> WHERE A.名前 = B.名前 AND B.日付 <= ?)
> を指定して、日付パラメーターを OleDbParameter の
> Value などから与えてみてください。

魔界の仮面弁士 さんへ

ありがとうございます。
望んだデータを取得できました。

>下記のデータを抽出したいと思います。
>指定日 2022/10/01 以前の最新データ

>名前 日付 回数
>田中 2022/9/15 1
>鈴木 2022/9/17 2
>佐藤 2022/8/21 3

そこで、さらに絞り込みを掛けたいのですが、
回数 = 2 のデータだけを抽出したく

名前 日付 回数
鈴木 2022/9/17 2

現在、DataTabe.Select()を使用して、
絞り込みをかけています。

SQL一回でデータ抽出したいと思います。
よろしくお願いします。


引用返信 編集キー/
■101312 / inTopicNo.4)  Re[3]: SQLにて指定日付以前、かつ最新のデータを抽出したい。
□投稿者/ 魔界の仮面弁士 (3554回)-(2023/02/01(Wed) 23:39:44)
No101311 (ステ さん) に返信
> 望んだデータを取得できました。
最古日未満の日付を指定した場合は抽出されなくなりますが、それは構わないのですよね?
(もし、そういう場合にも名前だけは出力して、日付や回数を NULL にしたいのならば LEFT JOIN が必要)


> そこで、さらに絞り込みを掛けたいのですが、
> 回数 = 2 のデータだけを抽出したく
外側の T1 表に対して、WHERE 条件を追加しては駄目ですか?
引用返信 編集キー/
■101313 / inTopicNo.5)  Re[4]: SQLにて指定日付以前、かつ最新のデータを抽出したい。
□投稿者/ ステ (3回)-(2023/02/02(Thu) 10:31:35)
No101312 (魔界の仮面弁士 さん) に返信

 魔界の仮面弁士さんへ

 本当にありがとうございます。

 何日間か、試行錯誤していましたが、
 一回のSQL発行で、望ましいデータを得る事ができ
 助かりました。


> 最古日未満の日付を指定した場合は抽出されなくなりますが、それは構わないのですよね?

 データにある日付しか選択(ComboBox使用)できないようにしてあるので、大丈夫です。

>>そこで、さらに絞り込みを掛けたいのですが、
>> 回数 = 2 のデータだけを抽出したく
> 外側の T1 表に対して、WHERE 条件を追加しては駄目ですか?

 内側で、条件を書いていて、望ましいデータを抽出できませんでした。
 SQLの理解不足でした。今後もSQLを使用するので、理解を深めていきます。

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -