アプリ版:「スタンプのみでお礼する」機能のリリースについて

長文となってしまい大変申し訳ございませんが、ご一読のうえご回答お願いいたします。

以下のテーブルがあります。

〇社員システム利用テーブル
ID       短いテキスト
社員名     短いテキスト
更新予定日1  短いテキスト
更新予定日2  短いテキスト
更新予定日3  短いテキスト
更新予定日4  短いテキスト
更新予定日5  短いテキスト

上記テーブルの更新予定日1~更新予定日5
を比較し、各社員の「最新更新予定日」を取得するクエリを作成したのですが
上手くできません。

★最新更新予定日
★更新予定日1~更新予定日5の日付の中でシステム日付を超えかつシステム日付に一番近い日付

(例)レコード1 データ内容
■システム日付:2021/9/2の場合
ID       001
社員名     鈴木 一
更新予定日1  2021/08/15
更新予定日2  空白
更新予定日3  2021/09/15
更新予定日4  2021/09/30
更新予定日5  空白
★最新更新予定日 2021/09/15 を取得したい

■システム日付:2021/9/19の場合
ID       001
社員名     鈴木 一
更新予定日1  2021/08/15
更新予定日2  空白
更新予定日3  2021/09/15
更新予定日4  2021/09/30
更新予定日5  空白
★最新更新予定日 2021/09/30 を取得したい

色々調べ、複数列の最大値を取得するSQLがあったので、それを基に色々試してみましたが、うまくできませんでした。

■最新更新予定日取得クエリ 作成したSQL
SELECT社員システム利用テーブル.ID,社員システム利用テーブル.社員名,社員システム利用テーブル.更新予定日1,社員システム利用テーブル.更新予定日2,社員システム利用テーブル.更新予定日3,社員システム利用テーブル.更新予定日4,社員システム利用テーブル.更新予定日5,
(SELECT Max([最新更新予定日]) FROM
(SELECT ID,更新予定日1 AS 最新更新予定日 FROM 社員システム利用テーブル AS x
UNION SELECT ID,更新予定日2FROM 社員システム利用テーブル AS x
UNION SELECT ID,更新予定日3FROM 社員システム利用テーブル AS x
UNION SELECT ID,更新予定日4FROM 社員システム利用テーブル AS x
UNION SELECT ID,更新予定日5FROM 社員システム利用テーブル AS x)
WHERE x.ID = システム利用テーブル.ID) AS 最新更新予定日
FROM 社員システム利用テーブル;

Max関数を使用しているので、これでレコード1の最新更新予定日を
取得するとシステム日付関係なく「2021/09/30」となる。(当たり前ですね)

【補足】
・別にUNIONを使用しなくても良いのですが、わかりやすかったので、上記SQLを参考に試してみました。他の方法でもOKです。
・このクエリで所得した最新更新予定日を他の処理で使用したいため、このクエリで最新更新予定日を取得することは可能でしょうか。

ご回答よろしくお願いします。

A 回答 (1件)

こんな感じ。


フィールド名の全角数字は半角にしてあります。
(全角数字のフィールド名はトラブルの元です。可能なら避けましょう。)
短いテキスト型の日付では、場合によっては抽出がうまくいかない可能性があります。
これも可能なら 日付型にした方が宜しいかと思います。

SELECT 社員システム利用テーブル.*, T.最新更新予定日
FROM 社員システム利用テーブル
LEFT JOIN
(SELECT UQ.ID, Min(UQ.最新更新予定日) AS 最新更新予定日 FROM
(SELECT ID,更新予定日1 AS 最新更新予定日 FROM 社員システム利用テーブル
UNION SELECT ID,更新予定日2 FROM 社員システム利用テーブル
UNION SELECT ID,更新予定日3 FROM 社員システム利用テーブル
UNION SELECT ID,更新予定日4 FROM 社員システム利用テーブル
UNION SELECT ID,更新予定日5 FROM 社員システム利用テーブル
) AS UQ
WHERE UQ.最新更新予定日>Date()
GROUP BY UQ.ID
) AS T
ON 社員システム利用テーブル.ID = T.ID;
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
上記SQLでうまくできました。ありがとうございます。
テーブルの設定についてご指摘ありがとうございます。他の処理も関連するので、色々調整を行いながら対応したいと思います。

本当にありがとうございました。

お礼日時:2021/09/03 09:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています