edit

Example

You might want to create a task that assigns a "Major Donor" tag to all contacts who have contributed more than a certain amount during the last 12 months. The SQL statement - which is what you would put in the "Main Script (SQL)" field - might look like this:

SET @Contribution_Status_Completed = (
  SELECT
    ov.value
  FROM
    civicrm_option_value ov
  WHERE
    option_group_id = (
      SELECT
        id
      FROM
        civicrm_option_group
      WHERE
        name = 'contribution_status'
    )
    AND ov.label = 'Completed');

DROP TABLE IF EXISTS temp_sqltasks_majordonor;

CREATE TABLE IF NOT EXISTS temp_sqltasks_majordonor AS
  SELECT
    ctrb.contact_id
  FROM
    civicrm_contribution ctrb
  WHERE
    receive_date >= CURDATE() - INTERVAL 1 YEAR
    AND ctrb.contribution_status_id = @Contribution_Status_Completed
  GROUP BY
    ctrb.contact_id
  HAVING
    SUM(ctrb.total_amount) >= 1000;

This script creates a new database table with one column containing the Contact ID of all contacts who are major donors. You can also specify a cleanup script, which is always executed after the task has executed. It is recommended that you use this to drop any tables you create in your main script. Your script might look like this:

DROP TABLE IF EXISTS temp_sqltasks_majordonor;

Next, you configure the task to assign the "Major Donors" tag to all donors in this table. At the same time, we want to remove the tag from all contacts that are not in this table. To do that, we can use the "Synchronize Tag" action. For the "Contact Table" field, we use the table created by our script: temp_sqltasks_majordonor.

Finally, select the "Major Donor" tag from the tag list and save your task using "Create".