/// <summary>
        /// Restituisce la stringa di query base per la misura
        /// </summary>
        /// <param name="connection">Connessione</param>
        /// <param name="measure_coord">Coordinata del database per la misura</param>
        /// <param name="start_date">Data di inizio nella clausola WHERE</param>
        /// <param name="stop_date">Data di fine nella clausola WHERE</param>    
        /// <param name="order">Tipo di ordinamento</param>
        /// <param name="num_records">Numero di records (0 = massimo concesso)</param>
        /// <returns>Stringa di query</returns>
        /// <remarks>
        /// Per stringa base si intende una query compilata nelle specifiche SELECT, FROM e WHERE (solo per tabelle relazionali),
        /// con la possibilità di aggiungere parametri.
        /// </remarks>
        string GetBaseQueryStr(WetDBConn connection, MeasureDBCoord_Struct measure_coord, DateTime start_date, DateTime stop_date, WetDBConn.OrderTypes order, ulong num_records)
        {
            string query;

            switch (connection.GetProvider())
            {
                default:
                    query = string.Empty;
                    break;

                case WetDBConn.ProviderType.ARCHESTRA_SQL:
                    query = "SELECT ";
                    if (num_records > 0)
                        query += "TOP " + num_records.ToString() + " ";
                    query += "Format(Datetime,'yyyy-MM-dd HH:mm:ss') AS " + measure_coord.timestamp_column + ", Format(Value, '#########0.00') AS '" + measure_coord.value_column + "' FROM " + measure_coord.table_name +
                        " WHERE History.TagName = '" + measure_coord.value_column + "'" +
                        " AND vValue IS NOT NULL " +
                        "AND (Quality = 0 OR Quality = 1) " +
                        "AND (QualityDetail = 192 OR QualityDetail = 202 OR QualityDetail = 64) " +
                        //"AND wwResolution = " + ((int)(config.interpolation_time * 60 * 1000)).ToString() + " " +
                        //"AND wwRetrievalMode = 'Cyclic' " +
                        "AND wwRetrievalMode = 'Full' " +
                        "AND DateTime > CONVERT(datetime, '" + start_date.ToString(WetDBConn.MYSQL_DATETIME_FORMAT) + "', 120) " +
                        "AND DateTime <= CONVERT(datetime, '" + stop_date.ToString(WetDBConn.MYSQL_DATETIME_FORMAT) + "', 120) ORDER BY " +
                        measure_coord.timestamp_column + (order == WetDBConn.OrderTypes.ASC ? " ASC" : " DESC");
                    break;

                case WetDBConn.ProviderType.IFIX_SQL:
                    query = "SELECT ";
                    if (num_records > 0)
                        query += "TOP " + num_records.ToString() + " ";
                    query += "* FROM OPENQUERY(IHIST,'SELECT timestamp AS " + measure_coord.timestamp_column +
                        ", value AS " + measure_coord.value_column + " FROM " + measure_coord.table_name +
                        " WHERE Tagname = " + measure_coord.value_column +
                        " AND quality = 100 AND timestamp > ''" + start_date.ToString(WetDBConn.MYSQL_DATETIME_FORMAT) +
                        "'' AND timestamp <= ''" + stop_date.ToString(WetDBConn.MYSQL_DATETIME_FORMAT) + "'' AND samplingmode = LAB ORDER BY " +
                        measure_coord.timestamp_column + (order == WetDBConn.OrderTypes.ASC ? " ASC" : " DESC") + "')";
                    break;

                case WetDBConn.ProviderType.EXCEL:
                    query = "SELECT ";
                    if (num_records > 0)
                        query += "TOP " + num_records.ToString() + " ";
                    query += measure_coord.timestamp_column + ", " + measure_coord.value_column + " FROM " + measure_coord.table_name +
                        " WHERE (" + measure_coord.timestamp_column + " > #" + start_date.ToString(WetDBConn.MYSQL_DATETIME_FORMAT) +
                                "# AND " + measure_coord.timestamp_column + " <= #" + stop_date.ToString(WetDBConn.MYSQL_DATETIME_FORMAT) + "#)" +
                        " ORDER BY " + measure_coord.timestamp_column + " " + (order == WetDBConn.OrderTypes.ASC ? "ASC" : "DESC");
                    break;

                case WetDBConn.ProviderType.GENERIC_MYSQL:
                    query = "SELECT `" + measure_coord.timestamp_column + "`, `" + measure_coord.value_column + "` FROM " + measure_coord.table_name +
                        " WHERE ";
                    if (measure_coord.relational_id_column != string.Empty)
                    {
                        query += "`" + measure_coord.relational_id_column + "` = ";
                        switch (measure_coord.relational_id_type)
                        {
                            case WetDBConn.PrimaryKeyColumnTypes.REAL:
                                query += measure_coord.relational_id_value.Replace(',', '.');
                                break;

                            case WetDBConn.PrimaryKeyColumnTypes.DATETIME:
                                query += "'" + Convert.ToDateTime(measure_coord.relational_id_value).ToString(WetDBConn.MYSQL_DATETIME_FORMAT) + "'";
                                break;

                            case WetDBConn.PrimaryKeyColumnTypes.TEXT:
                                query += "'" + measure_coord.relational_id_value + "'";
                                break;

                            default:
                                query += measure_coord.relational_id_value;
                                break;
                        }
                        query += " AND ";
                    }
                    query += "(`" + measure_coord.timestamp_column + "` > '" + start_date.ToString(WetDBConn.MYSQL_DATETIME_FORMAT) +
                                "' AND `" + measure_coord.timestamp_column + "` <= '" + stop_date.ToString(WetDBConn.MYSQL_DATETIME_FORMAT) + "')";
                    query += " ORDER BY `" + measure_coord.timestamp_column + "` " + (order == WetDBConn.OrderTypes.ASC ? "ASC" : "DESC");
                    if (num_records > 0)
                        query += " LIMIT " + num_records.ToString();
                    break;
            }

            return query;
        }