FedEx
SELECT Statements
A SELECT statement can consist of the following basic clauses.
- SELECT 
- INTO 
- FROM 
- JOIN 
- WHERE 
- GROUP BY 
- HAVING 
- UNION 
- ORDER BY 
- LIMIT 
SELECT Syntax
The following syntax diagram outlines the syntax supported by the SQL engine of the provider:
SELECT {
  [ TOP <numeric_literal> | DISTINCT ]
  {
    *
    | {
        <expression> [ [ AS ] <column_reference> ]
        | { <table_name> | <correlation_name> } .*
      } [ , ... ]
  }
  [ INTO csv:// [ filename= ] <file_path> [ ;delimiter=tab ] ]
  {
    FROM <table_reference> [ [ AS ] <identifier> ]
  } [ , ... ]
  [ [ 
      INNER | { { LEFT | RIGHT | FULL } [ OUTER ] }
    ] JOIN <table_reference> [ ON <search_condition> ] [ [ AS ] <identifier> ]
  ] [ ... ]
  [ WHERE <search_condition> ]
  [ GROUP BY <column_reference> [ , ... ]
  [ HAVING <search_condition> ]
  [ UNION [ ALL ] <select_statement> ]
  [
    ORDER BY
    <column_reference> [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ]
  ]
  [
    LIMIT <expression>
    [
      { OFFSET | , }
      <expression>
    ]
  ]
} | SCOPE_IDENTITY()
<expression> ::=
  | <column_reference>
  | @ <parameter>
  | ?
  | COUNT( * | { [ DISTINCT ] <expression> } )
  | { AVG | MAX | MIN | SUM | COUNT } ( <expression> )
  | NULLIF ( <expression> , <expression> )
  | COALESCE ( <expression> , ... )
  | CASE <expression>
      WHEN { <expression> | <search_condition> } THEN { <expression> | NULL } [ ... ]
    [ ELSE { <expression> | NULL } ]
    END
  | <literal>
  | <sql_function>
<search_condition> ::=
  {
    <expression> { = | > | < | >= | <= | <> | != | LIKE | NOT LIKE | IN | NOT IN | IS NULL | IS NOT NULL | AND | OR | CONTAINS | BETWEEN } [ <expression> ]
  } [ { AND | OR } ... ]
Examples
- Return all columns: - SELECT * FROM Senders
- Rename a column: - SELECT [Phone] AS MY_Phone FROM Senders
- Cast a column's data as a different data type: - SELECT CAST(AnnualRevenue AS VARCHAR) AS Str_AnnualRevenue FROM Senders
- Search data: - SELECT * FROM Senders WHERE SenderID = '25';
- Return the number of items matching the query criteria: - SELECT COUNT(*) AS MyCount FROM Senders
- Return the number of unique items matching the query criteria: - SELECT COUNT(DISTINCT Phone) FROM Senders
- Return the unique items matching the query criteria: - SELECT DISTINCT Phone FROM Senders
- Summarize data: - SELECT Phone, MAX(AnnualRevenue) FROM Senders GROUP BY Phone- See Aggregate Functions below for details. 
- Retrieve data from multiple tables. - SELECT p.ShipmentId, a.Email FROM Shipments p, Recipients a WHERE p.RecipientId = a.RecipientId- See JOIN Queries below for details. 
- Sort a result set in ascending order: - SELECT FirstName, Phone FROM Senders ORDER BY Phone ASC
- Restrict a result set to the specified number of rows: - SELECT FirstName, Phone FROM Senders LIMIT 10
- Parameterize a query to pass in inputs at execution time. This enables you to create prepared statements and mitigate SQL injection attacks. - SELECT * FROM Senders WHERE SenderID = @param
Aggregate Functions
COUNT
Returns the number of rows matching the query criteria.
SELECT COUNT(*) FROM Senders WHERE SenderID = '25'
COUNT(DISTINCT)
Returns the number of distinct, non-null field values matching the query criteria.
SELECT COUNT(DISTINCT FirstName) AS DistinctValues FROM Senders WHERE SenderID = '25'
AVG
Returns the average of the column values.
SELECT Phone, AVG(AnnualRevenue) FROM Senders WHERE SenderID = '25'  GROUP BY Phone
MIN
Returns the minimum column value.
SELECT MIN(AnnualRevenue), Phone FROM Senders WHERE SenderID = '25' GROUP BY Phone
MAX
Returns the maximum column value.
SELECT Phone, MAX(AnnualRevenue) FROM Senders WHERE SenderID = '25' GROUP BY Phone
SUM
Returns the total sum of the column values.
SELECT SUM(AnnualRevenue) FROM Senders WHERE SenderID = '25'
JOIN Queries
The Provider for FedEx supports standard SQL joins like the following examples.
Inner Join
An inner join selects only rows from both tables that match the join condition:
SELECT p.ShipmentId, a.Email FROM Shipments p, Recipients a WHERE p.RecipientId = a.RecipientId
Left Join
A left join selects all rows in the FROM table and only matching rows in the JOIN table:
SELECT p.ShipmentId, a.Email FROM Recipients a LEFT JOIN Shipments p ON p.RecipientId = a.RecipientId
Date Literal Functions
The following date literal functions can be used to filter date fields using relative intervals. Note that while the <, >, and = operators are supported for these functions, <= and >= are not.
TODAY()
The current day.
SELECT * FROM MyTable WHERE MyDateField = TODAY()
YESTERDAY()
The previous day.
SELECT * FROM MyTable WHERE MyDateField = YESTERDAY()
TOMORROW()
The following day.
SELECT * FROM MyTable WHERE MyDateField = TOMORROW()
LAST_WEEK()
Every day in the preceding week.
SELECT * FROM MyTable WHERE MyDateField = LAST_WEEK()
THIS_WEEK()
Every day in the current week.
SELECT * FROM MyTable WHERE MyDateField = THIS_WEEK()
NEXT_WEEK()
Every day in the following week.
SELECT * FROM MyTable WHERE MyDateField = NEXT_WEEK()
Also available:
- LAST/THIS/NEXT MONTH 
- LAST/THIS/NEXT QUARTER 
- LAST/THIS/NEXT YEAR 
LAST_N_DAYS(n)
The previous n days, excluding the current day.
SELECT * FROM MyTable WHERE MyDateField = LAST_N_DAYS(3)
NEXT_N_DAYS(n)
The following n days, including the current day.
SELECT * FROM MyTable WHERE MyDateField = NEXT_N_DAYS(3)
Also available:
- LAST/NEXT_90_DAYS 
LAST_N_WEEKS(n)
Every day in every week, starting n weeks before current week, and ending in the previous week.
SELECT * FROM MyTable WHERE MyDateField = LAST_N_WEEKS(3)
NEXT_N_WEEKS(n)
Every day in every week, starting the following week, and ending n weeks in the future.
SELECT * FROM MyTable WHERE MyDateField = NEXT_N_WEEKS(3)
Also available:
- LAST/NEXT_N_MONTHS(n) 
- LAST/NEXT_N_QUARTERS(n) 
- LAST/NEXT_N_YEARS(n) 
Last updated
