Ordenación de Agrupación y Limitación de Datos
Si desea seguir los ejemplos, consulte Datos de ejemplo para ejecutar consultas para ver un ejemplo de datos y utilizar los scripts para cargar datos de ejemplo para la prueba. Los scripts crean las tablas que se utilizan en los ejemplos y cargan los datos en las tablas.
Si desea seguir los ejemplos, consulte Datos de ejemplo para ejecutar consultas para ver un ejemplo de datos y aprender a utilizar la consola de OCI para crear tablas de ejemplo y cargar datos mediante archivos JSON.
Resultados de indicación
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 ticket 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 tickets de los pasajeros en el esquema BaggageInfo en función del 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 ha visto (la última vez 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 en función de la última estación vista y ordena los resultados filtrados en función de la última hora de visualización y el nombre completo de los pasajeros en orden descendente. Para ello, se utiliza la cláusula ORDER BY.
Nota: 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 que devuelve 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 su 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 muestra 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 en función de la última estación vista y ordena el resultado en función de la última hora de visualización. Se utiliza una matriz no anidada para simplificar los datos. Es decir, la matriz bagInfo se simplifica y se recupera la última vez que se ha visto. 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 en función de la última estación vista y ordena el resultado en función de la última hora de visualización. Se utiliza una matriz no anidada para simplificar los datos. Debe mostrar el contenido de la segunda página, por lo que debe definir un OFFSET 4. Aunque se limitan a 4 filas, solo se muestra una fila, ya que el conjunto de resultados total es solo 5. Se omiten los primeros y se muestra el quinto.
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, se utiliza una cláusula GROUP BY 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í se agrupan los datos en función del código de reserva y se 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 desea 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, se 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 de agregación incorporadas y de secuencia para buscar información como un recuento, una suma, un promedio, un mínimo o un máximo.
Ejemplo 1: busque el número total de bolsas comprobadas que se estima que llegan al aeropuerto de LAX a una hora concreta.
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 las maletas facturadas que se estima que llegan a un aeropuerto y una hora en particular. Para cada tramo de vuelo, el campo estimatedArrival de la matriz flightLegs de la tabla BaggageInfo contiene la hora de llegada de las maletas facturadas y el campo fltRouteDest contiene el código de aeropuerto de destino. En la consulta anterior, para determinar el número total de bolsas 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, sólo se seleccionan las filas que tienen el aeropuerto de destino como LAX. A continuación, puede determinar 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. Puesto 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 consulta rápida sobre el recuento de vuelos, el número de maletas facturadas y los detalles de enrutamiento de un próximo viaje 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 comprobadas por pasajero. La matriz flightLegs de bagInfo incluye los detalles de vuelo correspondientes a cada tramo de viaje. El campo de ruta 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 revisadas 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, sólo 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.
La sentencia CASE se utiliza para introducir diferentes mensajes en función del recuento de vuelos. Para facilitar su uso, en la consulta solo se tienen en cuenta tres tránsitos.
Salida:
{"fullName":"Lorenzo Phil","routing":"SFO/IST/ATH/JTR","BAGS":2,"FlightInfo":"You have three flights to catch"}
Ejemplos con 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 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);