Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2007)
グループ内での最大値
投稿日時: 17/08/19 21:24:14
投稿者: ゴマゴマ

お世話になります。
やりたいことは下記のとおり同一加工番号内で機械番号を最大の番号に統一したいという内容です。ただし抽出条件として取込日時が最新のもののみ。例では加工番号110の機械番号に50と60があるのを60に統一する、ただし取込日時が17/8/19 8:10もののみを対象とする。
 

加工番号行番	機械番号	取込日時
100	1	50	17/8/19 8:00
100	2	50	17/8/19 8:00
110	1	50	17/8/19 8:10
110	2	60	17/8/19 8:10
		↓	
加工番号行番	機械番号	取込日時
100	1	50	17/8/19 8:00
100	2	50	17/8/19 8:00
110	1	60	17/8/19 8:10
110	2	60	17/8/19 8:10

 
クエリの作成方法をご教示ください。

回答
投稿日時: 17/08/20 00:39:01
投稿者: mayu.

こんばんは。
 

引用:
クエリの作成方法をご教示ください。

■選択クエリ
-----------------------------------------------------------------------
 
SELECT x.加工番号
     , x.行番
     , IIf( x.取込日時 < y.取込日時, x.機械番号, y.mx ) As 機械番号
     , x.取込日時
FROM テーブル名 x
INNER JOIN
(
    SELECT 加工番号
         , 取込日時
         , Max( 機械番号 ) As mx
    FROM テーブル名 t1
    WHERE NOT EXISTS
          (
              SELECT 1 FROM テーブル名 t2
              WHERE t2.加工番号 = t1.加工番号
                AND t2.取込日時 > t1.取込日時
          )
    GROUP BY 加工番号
           , 取込日時
) y
ON x.加工番号 = y.加工番号
ORDER BY 1, 2 ;
 
 
■更新クエリ ( 選択クエリで表現可能のため不要。参考まで )
-----------------------------------------------------------------------
 
UPDATE テーブル名 x
,
(
    SELECT * FROM テーブル名 t1
    WHERE NOT EXISTS
          (
              SELECT 1 FROM テーブル名 t2
              WHERE t2.加工番号 = t1.加工番号
                AND ( t2.取込日時 > t1.取込日時
                         OR
                      t2.取込日時 = t1.取込日時 AND t2.機械番号 > t1.機械番号
                    )
          )
) y
SET x.機械番号 = y.機械番号
WHERE x.加工番号 = y.加工番号
  AND x.取込日時 = y.取込日時
  AND x.機械番号 < y.機械番号 ;

投稿日時: 17/08/21 07:11:52
投稿者: ゴマゴマ

mayu.様
 
さっそくに回答いただきましてありがとうございます。
また更新クエリまで教えてもらいやりたいことが一気にできそうです。
またよろしくお願いします。