Index: trunk/ippTools/share/Makefile.am
===================================================================
--- trunk/ippTools/share/Makefile.am	(revision 14566)
+++ trunk/ippTools/share/Makefile.am	(revision 14600)
@@ -38,4 +38,5 @@
 	difftool_todiffskyfile.sql \
 	difftool_revertdiffskyfile.sql \
+	pztool_find_completed_exp.sql \
 	regtool_pendingexp.sql \
 	regtool_pendingimfile.sql \
Index: trunk/ippTools/share/pztool_find_completed_exp.sql
===================================================================
--- trunk/ippTools/share/pztool_find_completed_exp.sql	(revision 14600)
+++ trunk/ippTools/share/pztool_find_completed_exp.sql	(revision 14600)
@@ -0,0 +1,30 @@
+SELECT DISTINCT
+    exp_name, -- return should match pzDoneExp
+    camera,
+    telescope
+FROM (
+    SELECT
+        pzDoneImfile.*,
+        summitExp.imfiles
+    FROM pzDoneExp
+    JOIN summitExp
+        USING(exp_name, camera, telescope)
+    LEFT JOIN pzDoneImfile
+        USING(exp_name, camera, telescope)
+    LEFT JOIN newExp
+        ON pzDoneExp.exp_name = newExp.tmp_exp_name
+        AND pzDoneExp.camera = newExp.tmp_camera
+        AND pzDoneExp.telescope = newExp.tmp_telescope
+    WHERE
+        newExp.tmp_exp_name IS NULL
+        AND newExp.tmp_camera IS NULL
+        AND newExp.tmp_telescope IS NULL
+    GROUP BY
+        pzDoneExp.exp_name,
+        pzDoneExp.camera,
+        pzDoneExp.telescope
+    -- it doesn't matter which field in pzDoneImfile we count as we've already
+    -- done a group by
+    HAVING
+        COUNT(pzDoneImfile.exp_name) = summitExp.imfiles
+    ) as Foo
