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

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

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

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

SQL

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

Q&A

解決済

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

xxx8
xxx8

総合スコア41

SQL Server

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

SQL

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

2回答

0グッド

0クリップ

383閲覧

投稿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

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

1

ベストアンサー

べたですけど。

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

総合スコア24637

xxx8👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

xxx8

2018/11/28 02:47

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

1

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

総合スコア16990

xxx8👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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で取得することにしました。 今後ともよろしくお願いいたします

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

SQL Server

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

SQL

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