Index: trunk/ippTools/share/Makefile.am
===================================================================
--- trunk/ippTools/share/Makefile.am	(revision 38062)
+++ trunk/ippTools/share/Makefile.am	(revision 38080)
@@ -525,4 +525,5 @@
 	remotetool_definebyquery_stack.sql \
 	remotetool_definebyquery_staticsky.sql \
+	remotetool_definebyquery_diff.sql \
 	remotetool_dropcomponent.sql \
 	remotetool_listcomponent.sql \
Index: trunk/ippTools/share/remotetool_definebyquery_diff.sql
===================================================================
--- trunk/ippTools/share/remotetool_definebyquery_diff.sql	(revision 38080)
+++ trunk/ippTools/share/remotetool_definebyquery_diff.sql	(revision 38080)
@@ -0,0 +1,21 @@
+SELECT stage_id FROM
+
+( SELECT diff_id AS stage_id
+    FROM diffRun
+WHERE
+diffRun.state = 'new'
+-- where hook %s
+GROUP BY diff_id
+) AS W
+
+LEFT JOIN
+
+(SELECT remote_id,remoteRun.stage,remoteRun.label,remoteComponent.stage_id,remoteRun.state
+   FROM remoteRun
+   JOIN remoteComponent USING(remote_id)
+WHERE
+remoteRun.stage = 'staticsky' AND remoteComponent.state != 'retry'
+-- where hook %s
+) AS R
+USING(stage_id)
+WHERE R.remote_id IS NULL
Index: trunk/ippTools/src/remotetool.c
===================================================================
--- trunk/ippTools/src/remotetool.c	(revision 38062)
+++ trunk/ippTools/src/remotetool.c	(revision 38080)
@@ -155,4 +155,15 @@
   else if (!strcmp(stage,"staticsky")) {
     query = pxDataGet("remotetool_definebyquery_staticsky.sql");
+    if (!query) {
+      psError(PXTOOLS_ERR_SYS,false, "failed to retreive SQL statement");
+      return(false);
+    }
+
+    if (label) {
+      psStringAppend(&whereOption, "\n AND (label = '%s')", label);
+    }
+  }
+  else if (!strcmp(stage,"diff")) {
+    query = pxDataGet("remotetool_definebyquery_diff.sql");
     if (!query) {
       psError(PXTOOLS_ERR_SYS,false, "failed to retreive SQL statement");
