Examples of SQL queries for ODBC connections
This article shows some concrete examples which can help you set up your ODBC data source. More information can be found in this article.
The following examples assume that separate queries (values-STRING.sql) weren’t needed for pulling string tags.
If your database table contains different description, units and types for a single tag name, you can use the SQL function FIRST_VALUE() to get the first value in an ordered partition of a result set. The following query will return the first description, unit and type it encounters for every distinct “tagname”.
SELECT DISTINCT tagname, FIRST_VALUE(description) OVER (PARTITION BY tagname ORDER BY tagname) as description, FIRST_VALUE(units) OVER (PARTITION BY tagname ORDER BY tagname) as units, FIRST_VALUE(type) OVER (PARTITION BY tagname ORDER BY tagname) as type, FROM Table_1
In case where the values.sql query pulls data and there is more than one value for the same timestamp, you should only pick one (first value) or TrendMiner will show both values for the same timestamp. The following query will return the first “value” encountered for a given tag and date range.
SELECT DISTINCT FIRST_VALUE(value) OVER (PARTITION BY timestamp ORDER BY value desc) as value, timestamp as ts FROM Table_1 WHERE tagname = ? AND timestamp IS BETWEEN ? AND ? ORDER BY timestamp ASC
If the values table contains entries (rows) with an empty (null) value, the generic values.sql query will look as follows
SELECT value, timestamp as ts FROM Table_1 WHERE tagname = ? AND timestamp IS BETWEEN ? AND ? AND value IS NOT NULL ORDER BY timesamp ASC
Use a UNION statement to combine the output of two different tables (Table_1 and Table_2) into a single list.sql query.
SELECT tagname, description, type, units FROM Table_1 UNION SELECT tagname, description, type, units FROM Table_2
Depending on the table schema, you might want to concatenate (combine) multiple columns to generate a unique tagname as shown below. You might also want to do the same for the description as well.
SELECT DISTINCT (CAST(COMPONENT_NAME as varchar) + CAST(TANK_NUMBER as varchar)) as tagname, description, type, units FROM Table_1
In this case, assuming the values and timestamps originate from the same table, the values.sql query might look as follows
SELECT value2, FORMAT(value2, 'N', 'en-us') as value2_US_Format, FORMAT(value2, 'N', 'de-de') as value2_DE_Format FROM Table_1
![]() |
You might need to combine (join) multiple tables to generate a query output with all the necessary information for the list.sql file. In the query shown below, “TagName” and “Description” are both part of the table “_Tag”. However, the type and units are part of the “TagType” and “EngineeringUnit” tables respectively, pulled using the corresponding keys.
SELECT DISTINCT TagName as tagname, Description as description, Unit as units, TagTypeName as type FROM _Tag LEFT JOIN TagType ON _Tag.TagType=TagType.TagTypeKey LEFT JOIN EngineeringUnit ON _Tag.EUKey=EngineeringUnit.EUKey