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

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

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

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

SQL

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

Q&A

解決済

1回答

3481閲覧

複数列で値を比較し、最大値となる1行を行ごと取得するクエリを生成したい

YanValCyn

総合スコア12

SQL Server

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

SQL

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

0グッド

0クリップ

投稿2021/03/15 01:45

#はじめに

掲題の件について、色々調べてみたのですがどうしても分からなかった為、質問させていただきました。
どうぞ宜しくお願い致します。

#質問内容の詳細

例えば以下のようなテーブルがあったとします。(あくまでも例です。ご留意ください。)

イメージ説明

このときに、一番最近の日付(この例で行くと2021/3/15)の行データを全て取得するクエリを生成したい、というのが今回の質問です。

一番最近の日付を取得するには、year→month→dayの順番で最大値を比較する必要があると認識しています。
また、最大値の比較対象列(今回でいうとyear,month,day)以外のカラムも全て取得したいです。

※取得結果イメージ
イメージ説明

より詳細にお伝えしますと、今回の例に限らず、複数行で比較の優先付けを行いながら(今回の場合、①yearを比較→②monthで比較…といった形で、カラム毎に比較順位が存在する)、最大値の行を丸々取得するようなクエリを書くにはどうすれば良いのか?というのが今回知りたい事です。

#環境
SQL Server 13.0.4259

#知っていること
比較対象列を結合させたカラムを作り、そのカラムを比較する、という手法は知っています。

イメージ説明

しかし、この手法では、私の認識している限り、集計関数(今回だとMax)を用いねばならず、集計対象外のカラムが取得できません。

(以下のクエリでは、本来、桁揃えなどが必要になる事は認識していますが、単純化するために省略しています)

◆クエリ
SELECT MAX(year + month + day) as union
FROM this_table

◆結果
イメージ説明

#その他調べてみたこと
以下のサイトは、限りなく本件の答えであろうと認識していますが、
今回の質問のようなケースでどのようなクエリを書けば良いのかまでは具体例が無いため、わかりかねる状態です。

同一グループの中で最大のレコードを取得する SQL を書く
http://labs.timedia.co.jp/2014/10/selecting-max-record-in-group-by.html

以上、どうぞ宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

やり方はいろいろあると思いますが、一例としてORDER BY句のOFFSETとFETCHを利用する方法があります。

SQL

1SELECT * 2FROM t 3ORDER BY year DESC, month DESC, day DESC 4OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY

参考: SELECT - ORDER BY 句 (Transact-SQL)

投稿2021/03/15 04:45

neko_the_shadow

総合スコア2230

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

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

YanValCyn

2021/03/15 08:18

ご回答ありがとうございます。 並び替えを使えばいいのですね。感嘆しました。 言われてみれば当然な気がしますが、全く頭にありませんでした。 とても助かりました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問