Ordenación de la agrupación y limitación de datos

Si desea seguir los ejemplos, consulte para ver un ejemplo de datos y utilizar los scripts para cargar datos de ejemplo para pruebas. Los scripts crean las tablas utilizadas en los ejemplos y cargan datos en las tablas.

Si desea seguir los ejemplos, consulte Datos de ejemplo para ejecutar consultas para ver datos de ejemplo y aprender a utilizar la consola de OCI para crear las tablas de ejemplo y cargar datos mediante archivos JSON.

Indicación de resultados

Utilice la cláusula ORDER BY para ordenar los resultados por cualquier columna, clave primaria o clave no primaria.

Ejemplo 1: ordene el número de billete de todos los pasajeros por su nombre completo.
SELECT bag.ticketNo, bag.fullName 
FROM BaggageInfo bag 
ORDER BY bag.fullName

Explicación: está ordenando el número de pasajeros del ticket en el esquema BaggageInfo según el nombre completo de los pasajeros en orden ascendente.

Salida:
{"ticketNo":1762344493810,"fullName":"Adam Phillips"}
{"ticketNo":1762392135540,"fullName":"Adelaide Willard"}
{"ticketNo":1762376407826,"fullName":"Dierdre Amador"}
{"ticketNo":1762355527825,"fullName":"Doris Martin"}
{"ticketNo":1762324912391,"fullName":"Elane Lemons"}
{"ticketNo":1762350390409,"fullName":"Fallon Clements"}
{"ticketNo":1762341772625,"fullName":"Gerard Greene"}
{"ticketNo":176234463813,"fullName":"Henry Jenkins"}
{"ticketNo":1762383911861,"fullName":"Joanne Diaz"}
{"ticketNo":1762377974281,"fullName":"Kendal Biddle"}
{"ticketNo":1762355854464,"fullName":"Lisbeth Wampler"}
{"ticketNo":1762320369957,"fullName":"Lorenzo Phil"}
{"ticketNo":1762320569757,"fullName":"Lucinda Beckman"}
{"ticketNo":1762340683564,"fullName":"Mary Watson"}
{"ticketNo":1762330498104,"fullName":"Michelle Payne"}
{"ticketNo":1762348904343,"fullName":"Omar Harvey"}
{"ticketNo":1762399766476,"fullName":"Raymond Griffin"}
{"ticketNo":1762311547917,"fullName":"Rosalia Triplett"}
{"ticketNo":1762357254392,"fullName":"Teena Colley"}
{"ticketNo":1762390789239,"fullName":"Zina Christenson"}
{"ticketNo":1762340579411,"fullName":"Zulema Martindale"}
Ejemplo 2: recupere los detalles del pasajero (nombre completo, número de etiqueta) por la última vez que se vio (el último primero) para los pasajeros (ordenados por su nombre) cuya última estación vista es MEL.
SELECT bag.fullName, bag.bagInfo[].tagNum, 
bag.bagInfo[].lastSeenTimeGmt
FROM BaggageInfo bag 
WHERE bag.bagInfo[].lastSeenStation=any "MEL"
ORDER BY bag.bagInfo[].lastSeenTimeGmt DESC
Explicación: primero filtra los datos de la tabla BaggageInfo según la última estación vista y ordena los resultados filtrados según la última hora vista y el nombre completo de los pasajeros en orden descendente. Para ello, utilice la cláusula ORDER BY.

Note:

Puede utilizar más de una columna para ordenar la salida de la consulta.
Salida:
{"fullName":"Adam Phillips","tagNum":"17657806255240","lastSeenTimeGmt":"2019-02-01T16:13:00Z"}
{"fullName":"Zina Christenson","tagNum":"17657806228676","lastSeenTimeGmt":"2019-02-04T10:08:00Z"}
{"fullName":"Joanne Diaz","tagNum":"17657806292518","lastSeenTimeGmt":"2019-02-16T16:13:00Z"}
{"fullName":"Zulema Martindale","tagNum":"17657806288937","lastSeenTimeGmt":"2019-02-25T20:15:00Z"}

Limitar y compensar resultados

Utilice la cláusula LIMIT para limitar el número de resultados devueltos de una sentencia SELECT. Por ejemplo, si hay 1000 filas en una tabla, limite el número de filas que se devolverán especificando un valor LIMIT. Se recomienda utilizar LIMIT y OFFSET con una cláusula ORDER BY. De lo contrario, los resultados se devuelven en un orden aleatorio, lo que genera resultados impredecibles.

Un buen caso de uso/ejemplo de uso de LIMIT y OFFSET es la paginación de resultados de la aplicación. Supongamos, por ejemplo, que la aplicación desea mostrar 4 resultados por página. Puede utilizar el límite y el desplazamiento para implantar la paginación sin estado en la aplicación. Si se muestran n (digamos 4) resultados por página, se muestran los resultados de la página m (digamos 2), el desplazamiento sería (n*m-1) que es 4 en este ejemplo y el límite sería n(que es 4 aquí).

Ejemplo 1: la aplicación puede mostrar 4 resultados en una página. Recupere los detalles recuperados por la aplicación en la primera página para los pasajeros cuya última estación vista es JTR.
SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time
FROM BaggageInfo $bag, 
$bag.bagInfo[].lastSeenTimeGmt $flt_time
WHERE $bag.bagInfo[].lastSeenStation=any "JTR" 
ORDER BY $flt_time LIMIT 4

Explicación: filtra los datos de la tabla BaggageInfo según la última estación vista y ordena el resultado según la última hora vista. Utilice una matriz anidada para simplificar los datos. Es decir, la matriz bagInfo se simplifica y se recupera la última hora vista. Solo tiene que mostrar las primeras 4 filas del juego de resultados.

Salida:
{"fullName":"Michelle Payne","tagNum":"17657806247861","flt_time":"2019-02-02T23:59:00Z"}
{"fullName":"Gerard Greene","tagNum":"1765780626568","flt_time":"2019-03-07T16:01:00Z"}
{"fullName":"Lorenzo Phil","tagNum":["17657806240001","17657806340001"],"flt_time":"2019-03-12T15:05:00Z"}
{"fullName":"Lucinda Beckman","tagNum":"17657806240001","flt_time":"2019-03-12T15:05:00Z"}
Ejemplo 2: la aplicación puede mostrar 4 resultados en una página. Recupere los detalles recuperados por la aplicación en la segunda página para los pasajeros cuya última estación vista es JTR.
SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time 
FROM BaggageInfo $bag, 
$bag.bagInfo[].lastSeenTimeGmt $flt_time 
WHERE $bag.bagInfo[].lastSeenStation=any "JTR" 
ORDER BY $flt_time LIMIT 4 OFFSET 4

Explicación: filtra los datos de la tabla BaggageInfo según la última estación vista y ordena el resultado según la última hora vista. Utilice una matriz anidada para simplificar los datos. Debe mostrar el contenido de la segunda página, por lo que debe definir un OFFSET 4. Aunque LIMITA a 4 filas, solo se muestra una fila, ya que el conjunto de resultados total es solo 5. Las primeras se omiten y se muestra la quinta.

Salida:
{"fullName":"Lorenzo Phil","tagNum":["17657806240001","17657806340001"],
"flt_time":"2019-03-12T16:05:00Z"}

Agrupación de resultados

Utilice la cláusula GROUP BY para agrupar los resultados por una o más columnas de tabla. Normalmente, una cláusula GROUP BY se utiliza junto con una expresión de agregación como COUNT, SUM y AVG.

Ejemplo 1: muestra el número de bolsas para cada reserva realizada.
SELECT bag.confNo, 
count(bag.bagInfo) AS TOTAL_BAGS 
FROM BaggageInfo bag 
GROUP BY bag.confNo

Explicación: cada pasajero tiene un código de reserva (confNo). Un pasajero puede tener más de un equipaje. Aquí agrupa los datos en función del código de reserva y obtiene el recuento de la matriz bagInfo que proporciona el número de bolsas por reserva.

Salida:
{"confNo":"FH7G1W","TOTAL_BAGS":1}
{"confNo":"PQ1M8N","TOTAL_BAGS":1}
{"confNo":"XT6K7M","TOTAL_BAGS":1}
{"confNo":"DN3I4Q","TOTAL_BAGS":1}
{"confNo":"QB1O0J","TOTAL_BAGS":1}
{"confNo":"TX1P7E","TOTAL_BAGS":1}
{"confNo":"CG6O1M","TOTAL_BAGS":1}
{"confNo":"OH2F8U","TOTAL_BAGS":1}
{"confNo":"BO5G3H","TOTAL_BAGS":1}
{"confNo":"ZG8Z5N","TOTAL_BAGS":1}
{"confNo":"LE6J4Z","TOTAL_BAGS":1}
{"confNo":"XT1O7T","TOTAL_BAGS":1}
{"confNo":"QI3V6Q","TOTAL_BAGS":2}
{"confNo":"RL3J4Q","TOTAL_BAGS":1}
{"confNo":"HJ4J4P","TOTAL_BAGS":1}
{"confNo":"CR2C8MY","TOTAL_BAGS":1}
{"confNo":"LN0C8R","TOTAL_BAGS":1}
{"confNo":"MZ2S5R","TOTAL_BAGS":1}
{"confNo":"KN4D1L","TOTAL_BAGS":1}
{"confNo":"MC0E7R","TOTAL_BAGS":1}
Ejemplo 2: seleccione el equipaje total que se origina en cada aeropuerto (excluido el equipaje de tránsito).
SELECT $flt_src as SOURCE, 
count(*) as COUNT 
FROM BaggageInfo $bag, 
$bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src 
GROUP BY $flt_src

Explicación: desea obtener el recuento total de equipaje que se origina en cada aeropuerto. Sin embargo, no debe considerar los aeropuertos que forman parte del tránsito. Por lo tanto, los datos se agrupan con los valores de origen de vuelo del primer registro de la matriz flightLegs (ya que el primer registro es el origen). A continuación, determina el recuento de equipaje.

Salida:
{"SOURCE":"SFO","COUNT":6}
{"SOURCE":"BZN","COUNT":1}
{"SOURCE":"GRU","COUNT":1}
{"SOURCE":"LAX","COUNT":1}
{"SOURCE":"YYZ","COUNT":1}
{"SOURCE":"MEL","COUNT":1}
{"SOURCE":"MIA","COUNT":4}
{"SOURCE":"MSQ","COUNT":2}
{"SOURCE":"MXP","COUNT":2}
{"SOURCE":"JFK","COUNT":3}

Agregando resultados

Utilice las funciones agregadas incorporadas y de secuencia para buscar información como un recuento, una suma, una media, un mínimo o un máximo.

Ejemplo 1: busque el número total de bolsas facturadas que se estima llegan al aeropuerto LAX en un momento determinado.
SELECT $estdate as ARRIVALDATE, 
count($flight) AS COUNT
FROM BaggageInfo $bag, 
$bag.bagInfo.flightLegs.estimatedArrival $estdate,
$bag.bagInfo.flightLegs.flightNo $flight,  
$bag.bagInfo.flightLegs.fltRouteDest $flt_dest 
WHERE $estdate =any "2019-02-01T11:00:00Z" AND $flt_dest =any "LAX"
GROUP BY $estdate

Explicación: en una aplicación de seguimiento de equipaje de aerolínea, puede obtener el recuento total de equipaje facturado que se estima que llegará a un aeropuerto y una hora determinados. Para cada tramo de vuelo, el campo estimatedArrival de la matriz flightLegs de la tabla BaggageInfo contiene la hora de llegada de las maletas comprobadas y el campo fltRouteDest contiene el código del aeropuerto de destino. En la consulta anterior, para determinar el número total de maletas facturadas que llegan al aeropuerto LAX en un momento determinado, primero debe agrupar los datos con el valor de hora de llegada estimada mediante la cláusula GROUP BY. En el grupo, seleccione solo las filas que tienen el aeropuerto de destino como LAX. A continuación, determine el recuento de bolsas para las filas resultantes mediante la función de recuento.

Aquí, puede comparar las fechas con formato de cadena en formato ISO-8601 debido al orden de clasificación natural de las cadenas sin tener que convertirlas en tipos de datos de registro de hora. $bag.bagInfo.flightLegs.estimatedArrival y $bag.bagInfo.flightLegs.fltRouteDest son secuencias. Dado que la expresión de comparación '=' no puede funcionar en secuencias de más de un elemento, el operador de comparación de secuencias '=any' se utiliza en su lugar para comparar los campos estimatedArrival y fltRouteDest.

Salida:
{"ARRIVALDATE":"2019-02-01T11:00:00Z","COUNT":2}
Ejemplo 2: muestra un mensaje automatizado sobre el número de equipaje facturado, la ruta de viaje y el recuento de vuelos a un pasajero en la aplicación de seguimiento de equipaje de la aerolínea.
SELECT fullName,
b.baginfo[0].routing,
size(baginfo) AS BAGS,
    CASE
        WHEN seq_count(b.bagInfo[0].flightLegs.flightNo) = 1
        THEN "You have one flight to catch"
        WHEN seq_count(b.bagInfo[0].flightLegs.flightNo) = 2
        THEN "You have two flights to catch"
        WHEN seq_count(b.bagInfo[0].flightLegs.flightNo) = 3
        THEN "You have three flights to catch"
        ELSE "You do not have any travel listed today"
    END AS FlightInfo
FROM BaggageInfo b
WHERE ticketNo = 1762320369957

Explicación: en la aplicación de seguimiento de equipaje de la aerolínea, es útil mostrar un mensaje de búsqueda rápida con respecto al recuento de vuelos, el número de equipaje facturado y los detalles de enrutamiento de un viaje próximo para un pasajero. La matriz bagInfo contiene los detalles de la bolsa comprobada del pasajero. El tamaño de la matriz bagInfo determina el número de bolsas revisadas por pasajero. La matriz flightLegs de bagInfo incluye los detalles de vuelo correspondientes a cada tramo de viaje. El campo de enrutamiento incluye los códigos de aeropuerto de todos los fragmentos de viaje. Puede determinar el número de vuelos contando los campos flightNo en la matriz flightLegs. Si un pasajero tiene más de una bolsa revisada, habrá más de un elemento en la matriz bagInfo, uno para cada bolsa. En tales casos, la matriz flightLegs en todos los elementos del campo bagInfo de los datos de un pasajero contendrá los mismos valores. Esto se debe a que el destino de todas las maletas facturadas para un pasajero será el mismo. Al contar los campos flightNo, debe tener en cuenta solo un elemento de la matriz bagInfo para evitar la duplicación de resultados. En esta consulta, solo tiene en cuenta el primer elemento, es decir, bagInfo[0]. Como la matriz flightLegs tiene un campo flightNo para cada fragmento de viaje, es una secuencia y se determina el recuento de los campos flightNo por pasajero mediante la función seq_count.

Utilice la sentencia CASE para introducir diferentes mensajes en función del recuento de vuelos. Para facilitar el uso, solo se tienen en cuenta tres tránsitos en la consulta.

Salida:
{"fullName":"Lorenzo Phil","routing":"SFO/IST/ATH/JTR","BAGS":2,"FlightInfo":"You have three flights to catch"}

Ejemplos que utilizan la API QueryRequest

Puede utilizar la API QueryRequest para agrupar y ordenar datos y también recuperarlos de una tabla NoSQL.

Para ejecutar la consulta, utilice la API NoSQLHandle.query().

Descargue el código completo GroupSortData.java de los ejemplos aquí.
 //Fetch rows from the table
private static void fetchRows(NoSQLHandle handle,String sqlstmt) throws Exception {
   try (
      QueryRequest queryRequest = new QueryRequest().setStatement(sqlstmt);
      QueryIterableResult results = handle.queryIterable(queryRequest)){
      for (MapValue res : results) {
         System.out.println("\t" + res);
      }
   }
} 
String orderby_stmt="SELECT bag.fullName, bag.bagInfo[].tagNum,bag.bagInfo[].lastSeenTimeGmt FROM BaggageInfo bag "+
                             "WHERE bag.bagInfo[].lastSeenStation=any \"MEL\" ORDER BY bag.bagInfo[].lastSeenTimeGmt DESC";
System.out.println("Using ORDER BY to sort data ");
fetchRows(handle,orderby_stmt);
String sortlimit_stmt="SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time FROM BaggageInfo $bag, "+
                       "$bag.bagInfo[].lastSeenTimeGmt $flt_time WHERE $bag.bagInfo[].lastSeenStation=any \"JTR\""+
                       "ORDER BY $flt_time LIMIT 4";
System.out.println("Using ORDER BY and LIMIT to sort and limit data ");
fetchRows(handle,sortlimit_stmt);
String groupsortlimit_stmt="SELECT $flt_src as SOURCE,count(*) as COUNT FROM BaggageInfo $bag, "+
                           "$bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src GROUP BY $flt_src";
System.out.println("Using GROUP BY, ORDER BY and LIMIT to group, sort and limit data ");
fetchRows(handle,groupsortlimit_stmt);

Para ejecutar la consulta, utilice el método borneo.NoSQLHandle.query().

Descargue el código completo GroupSortData.py de los ejemplos aquí.
# Fetch data from the table
def fetch_data(handle,sqlstmt):
   request = QueryRequest().set_statement(sqlstmt)
   print('Query results for: ' + sqlstmt)
   result = handle.query(request)
   for r in result.get_results():
      print('\t' + str(r))  
orderby_stmt = '''SELECT bag.fullName, bag.bagInfo[].tagNum,bag.bagInfo[].lastSeenTimeGmt FROM BaggageInfo bag
                     WHERE bag.bagInfo[].lastSeenStation=any \"MEL\" ORDER BY bag.bagInfo[].lastSeenTimeGmt DESC'''
print('Using ORDER BY to sort data:')
fetch_data(handle,orderby_stmt)

sortlimit_stmt = '''SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time FROM BaggageInfo $bag,
                    $bag.bagInfo[].lastSeenTimeGmt $flt_time
                    WHERE $bag.bagInfo[].lastSeenStation=any "JTR"
                    ORDER BY $flt_time LIMIT 4'''
print('Using ORDER BY and LIMIT to sort and limit data:')
fetch_data(handle,sortlimit_stmt)

groupsortlimit_stmt = '''SELECT $flt_src as SOURCE, count(*) as COUNT FROM BaggageInfo $bag,
                         $bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src GROUP BY $flt_src'''
print('Using GROUP BY, ORDER BY and LIMIT to group, sort and limit data:')
fetch_data(handle,groupsortlimit_stmt)   

Para ejecutar una consulta, utilice la función Client.Query.

Descargue el código completo GroupSortData.go de los ejemplos aquí.
 //fetch data from the table
func fetchData(client *nosqldb.Client, err error, tableName string, querystmt string)(){
   prepReq := &nosqldb.PrepareRequest{
		Statement: querystmt,
   }
   prepRes, err := client.Prepare(prepReq)
   if err != nil {
      fmt.Printf("Prepare failed: %v\n", err)
      return
   }
   queryReq := &nosqldb.QueryRequest{
		 PreparedStatement: &prepRes.PreparedStatement,   }
   var results []*types.MapValue
   for {
      queryRes, err := client.Query(queryReq)
      if err != nil {
         fmt.Printf("Query failed: %v\n", err)
  	return
      }
      res, err := queryRes.GetResults()
      if err != nil {
         fmt.Printf("GetResults() failed: %v\n", err)
  	return
      }
      results = append(results, res...)
      if queryReq.IsDone() {
         break
      }
   }
   for i, r := range results {
      fmt.Printf("\t%d: %s\n", i+1, jsonutil.AsJSON(r.Map()))
   }
} 
orderby_stmt := `SELECT bag.fullName, bag.bagInfo[].tagNum,bag.bagInfo[].lastSeenTimeGmt FROM BaggageInfo bag
                    WHERE bag.bagInfo[].lastSeenStation=any "MEL" ORDER BY bag.bagInfo[].lastSeenTimeGmt DESC`
fmt.Printf("Using ORDER BY to sort data::\n")
fetchData(client, err,tableName,orderby_stmt)

sortlimit_stmt := `SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time FROM BaggageInfo $bag,
                   $bag.bagInfo[].lastSeenTimeGmt $flt_time
                   WHERE $bag.bagInfo[].lastSeenStation=any "JTR"
                   ORDER BY $flt_time LIMIT 4`
fmt.Printf("Using ORDER BY and LIMIT to sort and limit data::\n")
fetchData(client, err,tableName,sortlimit_stmt)

groupsortlimit_stmt := `SELECT $flt_src as SOURCE, count(*) as COUNT FROM BaggageInfo $bag,
                        $bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src GROUP BY $flt_src`
fmt.Printf("Using GROUP BY, ORDER BY and LIMIT to group, sort and limit data::\n")
fetchData(client, err,tableName,groupsortlimit_stmt)

Para ejecutar una consulta, utilice el método query.

JavaScript: descargue el código completo GroupSortData.js de los ejemplos aquí.
  //fetches data from the table
async function fetchData(handle,querystmt) {
   const opt = {};
   try {
      do {
         const result = await handle.query(querystmt, opt);
         for(let row of result.rows) {
            console.log('  %O', row);
         }
         opt.continuationKey = result.continuationKey;
      } while(opt.continuationKey);
   } catch(error) {
      console.error('  Error: ' + error.message);
   }
}
TypeScript: descargue el código completo GroupSortData.ts de los ejemplos aquí.
interface StreamInt {
   acct_Id: Integer;
   profile_name: String;
   account_expiry: TIMESTAMP;
   acct_data: JSON;
}
/* fetches data from the table */
async function fetchData(handle: NoSQLClient,querystmt: string) {
   const opt = {};
   try {
      do {
         const result = await handle.query<StreamInt>(querystmt, opt);
         for(let row of result.rows) {
            console.log('  %O', row);
         }
         opt.continuationKey = result.continuationKey;
      } while(opt.continuationKey);
   } catch(error) {
      console.error('  Error: ' + error.message);
   }
}
const orderby_stmt = `SELECT bag.fullName, bag.bagInfo[].tagNum,bag.bagInfo[].lastSeenTimeGmt FROM BaggageInfo bag
                      WHERE bag.bagInfo[].lastSeenStation=any \"MEL\" ORDER BY bag.bagInfo[].lastSeenTimeGmt DESC`
console.log("Using ORDER BY to sort data");
await fetchData(handle,orderby_stmt);

const sortlimit_stmt = `SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time FROM BaggageInfo $bag,
                        $bag.bagInfo[].lastSeenTimeGmt $flt_time
                        WHERE $bag.bagInfo[].lastSeenStation=any "JTR"
                        ORDER BY $flt_time LIMIT 4`
console.log("Using ORDER BY and LIMIT to sort and limit data");
await fetchData(handle,sortlimit_stmt);

const groupsortlimit_stmt = `SELECT $flt_src as SOURCE, count(*) as COUNT FROM BaggageInfo $bag,
                             $bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src GROUP BY $flt_src`
console.log("Using GROUP BY, ORDER BY and LIMIT to group, sort and limit data");
await fetchData(handle,groupsortlimit_stmt);

Para ejecutar una consulta, puede llamar al método QueryAsync o llamar al método GetQueryAsyncEnumerable e iterar sobre el elemento enumerable asíncrono resultante.

Descargue el código completo GroupSortData.cs de los ejemplos aquí.
private static async Task fetchData(NoSQLClient client,String querystmt){
   var queryEnumerable = client.GetQueryAsyncEnumerable(querystmt);
   await DoQuery(queryEnumerable);
}

private static async Task DoQuery(IAsyncEnumerable<QueryResult<RecordValue>> queryEnumerable){
   Console.WriteLine("  Query results:");
   await foreach (var result in queryEnumerable) {
      foreach (var row in result.Rows)
      {
         Console.WriteLine();
         Console.WriteLine(row.ToJsonString());
      }
   }
} 
private const string orderby_stmt =@"SELECT bag.fullName, bag.bagInfo[].tagNum,bag.bagInfo[].lastSeenTimeGmt 
                                             FROM BaggageInfo bag WHERE bag.bagInfo[].lastSeenStation=any ""MEL"" 
                                             ORDER BY bag.bagInfo[].lastSeenTimeGmt DESC";
Console.WriteLine("\nUsing ORDER BY to sort data!");
await fetchData(client,orderby_stmt);

private const string sortlimit_stmt =@"SELECT $bag.fullName, $bag.bagInfo.tagNum, $flt_time FROM BaggageInfo $bag,
                                             $bag.bagInfo[].lastSeenTimeGmt $flt_time
                                             WHERE $bag.bagInfo[].lastSeenStation=any ""JTR""
                                             ORDER BY $flt_time LIMIT 4";
Console.WriteLine("\nUsing ORDER BY and LIMIT to sort and limit data!");
await fetchData(client,sortlimit_stmt);


private const string groupsortlimit_stmt =@"SELECT $flt_src as SOURCE, count(*) as COUNT FROM BaggageInfo $bag,
                                                  $bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src GROUP BY $flt_src" ;
Console.WriteLine("\nUsing GROUP BY, ORDER BY and LIMIT to group, sort and limit data:");
await fetchData(client,groupsortlimit_stmt);