Index: /trunk/ippTools/share/Makefile.am
===================================================================
--- /trunk/ippTools/share/Makefile.am	(revision 31686)
+++ /trunk/ippTools/share/Makefile.am	(revision 31687)
@@ -371,4 +371,5 @@
 	stacktool_addsummary.sql \
 	staticskytool_definebyquery_select.sql \
+	staticskytool_definebyquery_select_by_dg.sql \
 	staticskytool_definebyquery_inputs.sql \
 	staticskytool_export_run.sql \
Index: /trunk/ippTools/share/staticskytool_definebyquery_select.sql
===================================================================
--- /trunk/ippTools/share/staticskytool_definebyquery_select.sql	(revision 31686)
+++ /trunk/ippTools/share/staticskytool_definebyquery_select.sql	(revision 31687)
@@ -1,7 +1,5 @@
-SELECT 
+SELECT DISTINCT
        tess_id,	
        skycell_id,
-       data_group,
-       label,
        num_filter 
 FROM (
@@ -9,6 +7,4 @@
       tess_id,
       skycell_id,
-      label,
-      data_group,
       COUNT(DISTINCT filter) AS num_filter
   FROM stackRun
@@ -18,14 +14,13 @@
       AND stackSumSkyfile.quality = 0
   -- WHERE hook 1 %s 
-  -- restrict by stackSumSkyfile.good_frac, stackRun.skycell_id, stackRun.label
+  -- restrict by selected filters, stackSumSkyfile.good_frac, stackRun.skycell_id, stackRun.label
   GROUP BY
       tess_id,
-      skycell_id,
-      data_group
-  ) AS TMP
+      skycell_id
+  ) AS Stacks
 LEFT JOIN (
   SELECT DISTINCT sky_id,
     stackRun.skycell_id,
-    stackRun.label,
+    stackRun.tess_id,
     stackRun.data_group,
     COUNT(stack_id) AS num_filter
@@ -35,8 +30,10 @@
     JOIN stackSumSkyfile USING(stack_id)
     WHERE 1
+    -- restrict by selected filters, stackSumSkyfile.good_frac, stackRun.skycell_id, stackRun.label
+    -- and unless -rerun is supplied that no existing staticskyRun exists
     -- WHERE hook 2 %s
   GROUP BY sky_id
- ) AS oldRuns
-USING(label, data_group, num_filter, skycell_id)
+ ) AS ExistingRunsInputs
+USING(tess_id, skycell_id, num_filter)
 WHERE num_filter = %d
 -- WHERE hook 3 %s
Index: /trunk/ippTools/share/staticskytool_definebyquery_select_by_dg.sql
===================================================================
--- /trunk/ippTools/share/staticskytool_definebyquery_select_by_dg.sql	(revision 31687)
+++ /trunk/ippTools/share/staticskytool_definebyquery_select_by_dg.sql	(revision 31687)
@@ -0,0 +1,43 @@
+SELECT DISTINCT
+       tess_id,	
+       skycell_id,
+       Stacks.data_group,
+       num_filter 
+FROM (
+  SELECT
+      tess_id,
+      skycell_id,
+      label,
+      data_group,
+      COUNT(DISTINCT filter) AS num_filter
+  FROM stackRun
+  JOIN stackSumSkyfile USING(stack_id)
+  WHERE stackRun.state = 'full'
+      AND stackSumSkyfile.fault = 0
+      AND stackSumSkyfile.quality = 0
+  -- WHERE hook 1 %s 
+  -- restrict by selected filters, stackSumSkyfile.good_frac, stackRun.skycell_id, stackRun.label
+  GROUP BY
+      tess_id,
+      skycell_id,
+      data_group
+  ) AS Stacks
+LEFT JOIN (
+  SELECT DISTINCT sky_id,
+    stackRun.skycell_id,
+    stackRun.tess_id,
+    stackRun.data_group,
+    COUNT(stack_id) AS num_filter
+  FROM staticskyRun
+    JOIN staticskyInput USING(sky_id)
+    JOIN stackRun USING(stack_id)
+    JOIN stackSumSkyfile USING(stack_id)
+    WHERE 1
+    -- WHERE hook 2 %s
+    -- restrict by selected filters, stackSumSkyfile.good_frac, stackRun.skycell_id, stackRun.label
+  GROUP BY sky_id
+ ) AS ExistingRunsInputs
+USING(tess_id, skycell_id, data_group, num_filter)
+WHERE num_filter = %d
+    AND Stacks.data_group = ExistingRunsInputs.data_group
+-- WHERE hook 3 %s
Index: /trunk/ippTools/src/staticskytool.c
===================================================================
--- /trunk/ippTools/src/staticskytool.c	(revision 31686)
+++ /trunk/ippTools/src/staticskytool.c	(revision 31687)
@@ -102,5 +102,5 @@
 
     // optional
-    PXOPT_LOOKUP_STR(label,       config->args, "-set_label", false, false);
+    PXOPT_LOOKUP_STR(label,       config->args, "-set_label", true, false);
     PXOPT_LOOKUP_STR(data_group,  config->args, "-set_data_group", false, false);
     PXOPT_LOOKUP_STR(dist_group,  config->args, "-set_dist_group", false, false);
@@ -125,10 +125,16 @@
     int num_filter = filters->data.list->n;
 
+    PXOPT_LOOKUP_BOOL(group_by_data_group, config->args, "-group_by_data_group", false);
+    PXOPT_LOOKUP_BOOL(rerun, config->args, "-rerun", false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false);
     PXOPT_LOOKUP_BOOL(check_inputs, config->args, "-check_inputs", false);
-    PXOPT_LOOKUP_BOOL(rerun, config->args, "-rerun", false);
-
-    psString select = pxDataGet("staticskytool_definebyquery_select.sql");
+
+    psString select;
+    if (group_by_data_group) {
+        select = pxDataGet("staticskytool_definebyquery_select_by_dg.sql");
+    } else {
+        select = pxDataGet("staticskytool_definebyquery_select.sql");
+    }
     if (!select) {
         psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
@@ -150,10 +156,12 @@
     psFree(whereMD);
 
+    psString where2 = NULL;
     psString make_unique = NULL;
     if (!rerun) {
+        psStringAppend(&where2, "\n %s\nAND staticskyRun.label = '%s'", where, label);
         psStringAppend(&make_unique, "\nAND sky_id IS NULL");
     }
 
-    if (!p_psDBRunQueryF(config->dbh, select, where, where, num_filter, make_unique ? make_unique : "")) {
+    if (!p_psDBRunQueryF(config->dbh, select, where, where2 ? where2 : where, num_filter, make_unique ? make_unique : "")) {
         psError(PS_ERR_UNKNOWN, false, "database error");
         psFree(select);
@@ -161,4 +169,5 @@
     }
     psFree(select);
+    psFree(where2);
     psFree(make_unique);
 
Index: /trunk/ippTools/src/staticskytoolConfig.c
===================================================================
--- /trunk/ippTools/src/staticskytoolConfig.c	(revision 31686)
+++ /trunk/ippTools/src/staticskytoolConfig.c	(revision 31687)
@@ -53,7 +53,7 @@
     psMetadataAddStr(definebyqueryArgs,  PS_LIST_TAIL, "-select_label", PS_META_DUPLICATE_OK, "search by stackRun label (LIKE comparison, multiple OK)", NULL);
     psMetadataAddStr(definebyqueryArgs,  PS_LIST_TAIL, "-select_data_group", PS_META_DUPLICATE_OK, "search by stackRun data_group (LIKE comparison, multiple OK)", NULL);
-    psMetadataAddStr(definebyqueryArgs,  PS_LIST_TAIL, "-select_filter", PS_META_DUPLICATE_OK, "search by filter (LIKE comparison, multiplei OK)", NULL);
+    psMetadataAddStr(definebyqueryArgs,  PS_LIST_TAIL, "-select_filter", PS_META_DUPLICATE_OK, "search by filter (LIKE comparison, multiple OK)", NULL);
     psMetadataAddStr(definebyqueryArgs,  PS_LIST_TAIL, "-set_workdir", 0, "define workdir (required)", NULL);
-    psMetadataAddStr(definebyqueryArgs,  PS_LIST_TAIL, "-set_label", 0, "define label", NULL);
+    psMetadataAddStr(definebyqueryArgs,  PS_LIST_TAIL, "-set_label", 0, "define label (required)", NULL);
     psMetadataAddStr(definebyqueryArgs,  PS_LIST_TAIL, "-set_data_group", 0, "define data group", NULL);
     psMetadataAddStr(definebyqueryArgs,  PS_LIST_TAIL, "-set_dist_group", 0, "define dist group", NULL);
@@ -61,4 +61,5 @@
     psMetadataAddStr(definebyqueryArgs,  PS_LIST_TAIL, "-set_reduction", 0, "define reduction", NULL);
     psMetadataAddTime(definebyqueryArgs, PS_LIST_TAIL, "-set_registered", 0, "time detrend run was registered", now);
+    psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-group_by_data_group",  0, "queue unique run for each data_group", false);
     psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-rerun",  0, "queue new run even if one already exists for inputs", false);
     psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-pretend",  0, "do not actually modify the database", false);
