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

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

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

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

SQL

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

Q&A

解決済

3回答

7841閲覧

SQL Server 結合時に条件ありで一番大きい1件のみデータを抽出したい。

退会済みユーザー

退会済みユーザー

総合スコア0

SQL Server

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

SQL

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

0グッド

0クリップ

投稿2021/06/02 16:44

編集2021/06/03 11:29

以下の[年度]テーブルと、年度をキーにした[データ]テーブルがあります。
年度ごとに、その年度のデータと、その年度より一つ以上前の最新の1件のデータを取得するようにしたいです。
####[nendo]テーブル

nendo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
####[data]テーブル
nendodata
:--:--:
2B
4D
5E
6F
9I
10J
12L
####求める結果
nendocurrent_data
:--:--:
1
2B
3B
4D
5E
6F
7F
8F
9I
10J
11J
12L
13L
14L
15L
##試したSQL
```SQL
SELECT
nendo.nendo, x.data AS current_d, y.data AS before_d

FROM
nendo
LEFT JOIN
data x
ON x.nendo = nendo.nendo
LEFT JOIN
data y
ON y.nendo < nendo.nendo -- ここをどうすればいいかわからない。

データベースはSQLServerです。 急遽仕事を充てられて、細かいバージョンは不明ですので最新のバージョンを想定して回答していただければ問題ありません。 よろしくお願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/06/02 22:15

仕事なら組織内で解決するのが筋だと思うのですが?
退会済みユーザー

退会済みユーザー

2021/06/03 11:30

teratailでは個人的な内容の質問しかしてはいけないのですか?
退会済みユーザー

退会済みユーザー

2021/06/03 12:30

組織の業務としてやっていることは組織内で解決するのが当たり前でしょ。あなたに十分な教育を与えられないような組織がどうやって製品品質を担保できるの?
退会済みユーザー

退会済みユーザー

2021/06/03 15:19

IT関係のお仕事をされているかわかりませんが、インターネットを使ってわからないことを調べるということはしませんか?全て組織内で完結しているのですか?それと同じくらいのレベルのことだと思います。 特に今回の質問について、会社の情報が漏洩するような質問ではないのでteratailも問題とはしないと思いますが。
退会済みユーザー

退会済みユーザー

2021/06/03 21:34

あなたの上司、先輩に聞いてみたら? 厳しい会社だと規則違反で懲戒対象かも。 そもそも、ネットで調べることと、ここのような誰でもアクセスできる Q&A サイトで質問するのは違うって認識できてないのが驚き。
guest

回答3

0

ベストアンサー

before_dataは外部結合ではなく、スカラサブクエリを使うとよいかと思います。

SQL

1SELECT 2 N.nendo, 3 D1.data AS current_data, 4 (SELECT TOP(1) data 5 FROM data D2 6 WHERE D2.nendo < N.nendo 7 ORDER BY D2.nendo DESC) AS before_data 8FROM nendo N 9LEFT OUTER JOIN data D1 ON N.nendo = D1.nendo

投稿2021/06/03 02:39

neko_the_shadow

総合スコア2349

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

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

退会済みユーザー

退会済みユーザー

2021/06/03 11:33

スカラサブクエリというものを初めて知りました。 私が取得したい値通りのクエリでした。
guest

0

表題と質問内容が一致してないように見えるのは自分だけ?わからんけどこれで。

sql

1select A.nendo 2 ,(select top 1 C.data from [data] as C where C.nendo=A.nendo) as current_data 3 ,(select top 1 B.data from [data] as B where B.nendo=A.nendo+1) as before_data 4from nendo as A

投稿2021/06/02 23:50

sousuke

総合スコア3830

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

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

sazi

2021/06/03 03:05

一つ前の年度ではなく、直近の年度ですよ。
退会済みユーザー

退会済みユーザー

2021/06/03 11:31

おっしゃる通り表題と質問内容が一致していませんでしたので修正しました。 直近のデータなのでこのクエリでは取得できませんでした。
sousuke

2021/06/03 23:11

あ、ほんとだ。
guest

0

投稿2021/06/02 20:05

Orlofsky

総合スコア16417

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

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

sazi

2021/06/03 03:08

どのような集合に対して、NENDOでPARTITIONなのでしょう? 直近を求めるのにウインドウ関数だと冗長な気がします。
Orlofsky

2021/06/03 11:49

saziさんのようなサブクエリは思いつきませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問