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

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

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

Re[4]: SQLでの最大で最小のデータ取得


(過去ログ 148 を表示中)

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

■86676 / inTopicNo.1)  SQLでの最大で最小のデータ取得
  
□投稿者/ みらい (1回)-(2018/02/27(Tue) 13:51:53)

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

SQL Server2012での下記データを元に対象データの抽出、SQL文で悩んでいます。

<データ>
時刻          A  B   C   D  
2018/02/27 10:01:00   1   110   3000  9001
2018/02/27 10:02:00   1   130   1000  9002
2018/02/27 10:03:00   1   120   2000  9003
2018/02/27 10:11:00   1   130   1000  9004
2018/02/27 10:12:00   1   120   2000  9005
2018/02/27 10:13:00   1   130   3000  9006
2018/02/27 10:21:00   0   130   1000  9004
2018/02/27 10:22:00   0   120   2000  9005
2018/02/27 10:23:00   0   100   3000  9006

<結果>
2018/02/27 10:11:00   1   130   1000  9004

条件は、時刻が直近、A=1、Bが最大の中で、Cが一番小さいものです。

上記結果のレコードを抽出したいのですが、どなたか教えてください。
よろしくお願いします。

引用返信 編集キー/
■86678 / inTopicNo.2)  Re[1]: SQLでの最大で最小のデータ取得
□投稿者/ kiku (35回)-(2018/02/27(Tue) 14:16:59)
2018/02/27(Tue) 14:18:01 編集(投稿者)

型が不明な部分もあるのでなんとも言えませんが
下記のイメージで。

select TOP(1)
from テーブル名
where A='1'
orderby
B desc,
C,
時刻

引用返信 編集キー/
■86681 / inTopicNo.3)  Re[2]: SQLでの最大で最小のデータ取得
□投稿者/ みらい (2回)-(2018/02/27(Tue) 16:03:12)
No86678 (kiku さん) に返信
kiku さん、ありがとうございます。

私の質問の記述(データ・条件)に不備がありまして、期待している結果になりませんでした…
型は、時刻がsysdate、A〜Dはintになります。
また、D以外はPKで設定されています。

<データ>
時刻               A  B   C   D  
2018/02/27 10:01:00   1   210   3000  9001
2018/02/27 10:02:00   1   230   1000  9002
2018/02/27 10:03:00   1   220   2000  9003

2018/02/27 10:10:00   1   120   1000  9004
2018/02/27 10:11:00   1   130   1000  9004
2018/02/27 10:12:00   1   120   2000  9005
2018/02/27 10:13:00   1   130   3000  9006

2018/02/27 10:21:00   0   130   1000  9004
2018/02/27 10:22:00   0   120   2000  9005
2018/02/27 10:23:00   0   100   3000  9006


条件としては、
 1. A=1が対象の物
 2. 直近時刻の中で
 3. Bが最大の中で
 4. Cが一番小さい
になります。

>select TOP(1)
>from テーブル名
>where A='1'
>orderby
> B desc,
> C,
>時刻

を実行しましたら2行目、
2018/02/27 10:02:00   1   230   1000  9002
をヒットしました。

結果としては5行目
2018/02/27 10:11:00   1   130   1000  9004
を取り出したいのですが、条件2番目の直近時刻が特定出来なくて、
そもそも、データや条件に無理があるのではと悩んでいます。

よろしくお願いたします。

 

引用返信 編集キー/
■86683 / inTopicNo.4)  Re[3]: SQLでの最大で最小のデータ取得
□投稿者/ adba (1回)-(2018/02/27(Tue) 16:16:53)
直近時刻の定義は何でしょうか?
これが明確に定義できれば、いけそうな気がします。
引用返信 編集キー/
■86684 / inTopicNo.5)  Re[4]: SQLでの最大で最小のデータ取得
□投稿者/ みらい (3回)-(2018/02/27(Tue) 16:57:02)
No86683 (adba さん) に返信
adba さん、ありがとうございます。

データ内容について問合せてみました。
時刻はグループ単位で生成した同じ時刻が入る、
以下内容が正しいとの事でした。

<データ>
時刻               A  B   C   D  
2018/02/27 10:01:00   1   210   3000  9001
2018/02/27 10:01:00   1   230   1000  9002
2018/02/27 10:01:00   1   220   2000  9003

2018/02/27 10:10:00   1   120   1000  9004
2018/02/27 10:10:00   1   130   1000  9004
2018/02/27 10:10:00   1   120   2000  9005
2018/02/27 10:10:00   1   130   3000  9006

2018/02/27 10:21:00   0   130   1000  9004
2018/02/27 10:21:00   0   120   2000  9005
2018/02/27 10:21:00   0   100   3000  9006

 
以下で目的の結果を抽出できました。
 
 select
 	TOP 1
 	時刻,
 	A,
 	B,
 	C,
 	D
 from 
 	テーブル名
 where
 	A='1'
 order by
 	時刻 DESC,
 	B DESC,
 	C ASC
 
昨日から悩んでいたのですが、早く確認をしていれば
良かったです…
DBは始めたばかりなので、またよろしくお願いします!


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


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

このトピックに書きこむ

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

管理者用

- Child Tree -