質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

522閲覧

【SQLServer】昇順・降順を一度に取得したい

xxx8

総合スコア41

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/11/27 08:09

編集2018/11/27 08:10

前提・実現したいこと

同TBよりORDER BY xxx ASCとORDER BY xxx DESCの結果を
それぞれ一レコードずつ取得したいです。

詳細

以下のようなTBがあった場合

品番 ステータス  販売開始日
A00001 | 111 | 2018/11/10
A00002 | 111 | 2018/11/10
A00003 | 111 | 2018/09/01
A00004 | 222 | 2018/09/01
B00001 | 222 | 2018/09/20
B00002 | 111 | 2018/10/05
B00003 | 111 | 2018/11/01
B00004 | 111 | 2018/11/01
C00001 | 111 | 2017/06/01
C00002 | 222 | 2018/10/10

SELECT TOP 1 品番 FROM TB_XXX WHERE ステータス = '111' ORDER BY ASC 品番

とした場合は、ステータスが「111」のデータを昇順並び替え、
取得したデータのうち、1番目のデータつまり、
以下のレコードの"品番"が取得できるかと思います。

品番 ステータス  販売開始日 A00001 | 111 | 2018/11/10

降順を取得する場合は、ORDER BY句で「DESC」を
指定することで「C00001」を取得します。

ここで、この昇順、降順のデータの取得を
一度のSQLで取得したいと思っております。

補足情報(FW/ツールのバージョンなど)

SQLServer2016

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

べたですけど。

select max(品番) FROM TB WHERE ステータス='111' union all select min(品番) FROM TB WHERE ステータス='111'

さらに、べた

SQL

1 select * from TB where ステータス='111' and 品番=(select max(品番) FROM TB WHERE ステータス='111') 2union all 3 select * from TB where ステータス='111' and 品番=(select min(品番) FROM TB WHERE ステータス='111')

投稿2018/11/27 08:49

編集2018/11/27 09:16
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xxx8

2018/11/28 02:47

ご回答ありがとうございます。 上記の通りMAX,MINで取得するSQLを実行できるよう 改修しました。 助かりました。ありがとうございます。
guest

0

UNIONでつなげればいいんじゃないでしょうか。

SQL

1SELECT TOP 1品番FROM TB_XXX WHEREステータス = '111' ORDER BY ASC 品番 2UNION 3SELECT TOP 1品番FROM TB_XXX WHEREステータス = '111' ORDER BY DESC 品番

投稿2018/11/27 08:13

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xxx8

2018/11/27 08:34

ご回答ありがとうございます。 UNIONの前にORDER BYを単純に指定できないみたいで 苦戦中です。
ttyp03

2018/11/27 08:56 編集

よく確認せずに回答してしまい申し訳ありません。 括弧で括ったらどうでしょうか。 環境がなくてMySQLでしか確認できていませんが…。 (SELECT TOP 1 品番 FROM TB_XXX WHERE ステータス = '111' ORDER BY 品番 ASC) UNION (SELECT TOP 1 品番 FROM TB_XXX WHERE ステータス = '111' ORDER BY 品番 DESC) 余談ですが、ASC、DESCの指定はカラム名の後ろになりますので、訂正してあります。
Orlofsky

2018/11/27 11:50

UNIONとUNION ALLの違いは確認しましょう。
xxx8

2018/11/28 02:48

ttyp03様、Orlofsky様ご回答ありがとうございます。 今回はMAX、MINで取得することにしました。 今後ともよろしくお願いいたします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問