Ordinamento raggruppamento e limitazione dei dati
Se si desidera seguire gli esempi, vedere Dati di esempio per eseguire le query per visualizzare i dati di esempio e utilizzare gli script per caricare i dati di esempio per i test. Gli script creano le tabelle utilizzate negli esempi e caricano i dati nelle tabelle.
Se si desidera seguire gli esempi, vedere Dati di esempio per eseguire le query per visualizzare dati di esempio e imparare a utilizzare OCI Console per creare le tabelle di esempio e caricare i dati utilizzando i file JSON.
Risultati ordine
Utilizzare la clausola ORDER BY per ordinare i risultati in base a qualsiasi colonna, chiave primaria o chiave non primaria.
Esempio 1: ordinare il numero di cartellino di tutti i passeggeri in base al nome completo.
SELECT bag.ticketNo, bag.fullName
FROM BaggageInfo bag
ORDER BY bag.fullName
Spiegazione: si sta ordinando il numero di biglietti dei passeggeri nello schema BaggageInfo in base al nome completo dei passeggeri in ordine crescente.
Output:
{"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"}
Esempio 2: recuperare i dettagli del passeggero (nome completo, numero di cartellino) in base all'ora dell'ultima visita (ultima prima) per i passeggeri (ordinati in base al nome) la cui ultima visita è 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
Spiegazione: prima è possibile filtrare i dati nella tabella BaggageInfo in base all'ultima stazione visualizzata e ordinare i risultati filtrati in base all'ora dell'ultimo accesso e al nome completo dei passeggeri in ordine decrescente. A tale scopo, utilizzare la clausola ORDER BY.
Nota: è possibile utilizzare più colonne per ordinare l'output della query.
Output:
{"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"}
Risultati limite e offset
Utilizzare la clausola LIMIT per limitare il numero di risultati restituiti da un'istruzione SELECT. Ad esempio, se in una tabella sono presenti 1000 righe, limitare il numero di righe da restituire specificando un valore LIMIT. Si consiglia di utilizzare LIMIT e OFFSET con una clausola ORDER BY. Altrimenti, i risultati vengono restituiti in ordine casuale, producendo risultati imprevedibili.
Un buon caso d'uso/esempio di utilizzo di LIMIT e OFFSET è l'applicazione paging dei risultati. Supponiamo, ad esempio, che l'applicazione desideri visualizzare 4 risultati per pagina. È possibile utilizzare limite e offset per implementare il paging senza conservazione dello stato nell'applicazione. Se si stanno mostrando n (ad esempio 4 ) risultati per pagina, vengono visualizzati i risultati per la pagina m (ad esempio 2), quindi l'offset sarebbe (n*m-1) che è 4 in questo esempio e il limite sarebbe n (che è 4 qui).
Esempio 1: l'applicazione può mostrare 4 risultati in una pagina. Recuperare i dettagli recuperati dall'applicazione nella prima pagina per i passeggeri la cui ultima stazione visualizzata è 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
Spiegazione: i dati nella tabella BaggageInfo vengono filtrati in base all'ultima stazione visualizzata e il risultato viene ordinato in base all'ora dell'ultima visualizzazione. Utilizzare un array non nido per appiattire i dati. L'array bagInfo viene appiattito e viene recuperata l'ultima ora visualizzata. È necessario visualizzare solo le prime 4 righe del set di risultati.
Output:
{"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"}
Esempio 2: l'applicazione può mostrare 4 risultati in una pagina. Recupera i dettagli recuperati dall'applicazione nella seconda pagina per i passeggeri la cui ultima stazione visualizzata è 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
Spiegazione: i dati nella tabella BaggageInfo vengono filtrati in base all'ultima stazione visualizzata e il risultato viene ordinato in base all'ora dell'ultima visualizzazione. Utilizzare un array non nido per appiattire i dati. È necessario visualizzare il contenuto della seconda pagina, quindi impostare un OFFSET 4. Anche se si imposta LIMIT su 4 righe, viene visualizzata una sola riga poiché il set di risultati totale è solo 5. I primi vengono saltati e il quinto viene visualizzato.
Output:
{"fullName":"Lorenzo Phil","tagNum":["17657806240001","17657806340001"],
"flt_time":"2019-03-12T16:05:00Z"}
Risultati raggruppamento
Utilizzare la clausola GROUP BY per raggruppare i risultati in base a una o più colonne di tabella. In genere, una clausola GROUP BY viene utilizzata insieme a un'espressione aggregata come COUNT, SUM e AVG.
Esempio 1: visualizzare il numero di sacchetti per ogni prenotazione effettuata.
SELECT bag.confNo,
count(bag.bagInfo) AS TOTAL_BAGS
FROM BaggageInfo bag
GROUP BY bag.confNo
Spiegazione: ogni passeggero ha un codice di prenotazione (confNo). Un passeggero può avere più di un bagaglio. Qui si raggruppano i dati in base al codice di prenotazione e si ottiene il conteggio dell'array bagInfo che dà il numero di bagagli per prenotazione.
Output:
{"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}
Esempio 2: selezionare il bagaglio totale proveniente da ciascun aeroporto (esclusi i bagagli in transito).
SELECT $flt_src as SOURCE,
count(*) as COUNT
FROM BaggageInfo $bag,
$bag.bagInfo.flightLegs[0].fltRouteSrc $flt_src
GROUP BY $flt_src
Spiegazione: si desidera ottenere il conteggio totale dei bagagli provenienti da ciascun aeroporto. Tuttavia, non si desidera considerare gli aeroporti che fanno parte del transito. I dati vengono quindi raggruppati con i valori dell'origine di volo del primo record dell'array flightLegs (in quanto il primo record è l'origine). Determina quindi il conteggio dei bagagli.
Output:
{"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}
Risultati aggregati
Utilizzare le funzioni incorporate di aggregazione e sequenza per trovare informazioni quali un conteggio, una somma, una media, un minimo o un massimo.
Esempio 1: trovare il numero totale di sacchetti con check-in che si stima arrivino all'aeroporto LAX in un determinato momento.
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
Spiegazione: in un'applicazione di tracciamento dei bagagli delle compagnie aeree, è possibile ottenere il conteggio totale dei bagagli registrati che si prevede arriveranno in un determinato aeroporto e orario. Per ogni tappa di volo, il campo estimatedArrival nell'array flightLegs della tabella BaggageInfo contiene l'ora di arrivo dei bagagli controllati e il campo fltRouteDest contiene il codice dell'aeroporto di destinazione. Nella query di cui sopra, per determinare il numero totale di bagagli controllati che arrivano all'aeroporto LAX in un dato momento, si raggruppano i dati con il valore dell'orario di arrivo stimato utilizzando la clausola GROUP BY. Dal gruppo, si selezionano solo le righe che hanno l'aeroporto di destinazione come LAX. Quindi si determina il conteggio dei bagagli per le righe risultanti utilizzando la funzione count.
Qui, è possibile confrontare le date in formato stringa in formato ISO-8601 a causa del criterio di ordinamento naturale delle stringhe senza doverle inserire nei tipi di dati dell'indicatore orario. $bag.bagInfo.flightLegs.estimatedArrival e $bag.bagInfo.flightLegs.fltRouteDest sono sequenze. Poiché l'espressione di confronto '=' non può funzionare su sequenze di più elementi, l'operatore di confronto delle sequenze '=any' viene utilizzato per confrontare i campi estimatedArrival e fltRouteDest.
Output:
{"ARRIVALDATE":"2019-02-01T11:00:00Z","COUNT":2}
Esempio 2: visualizzare un messaggio automatico relativo al numero di bagagli registrati, alla rotta di viaggio e al numero di voli a un passeggero nell'applicazione di tracciamento dei bagagli della compagnia aerea.
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
Spiegazione: nell'applicazione di tracciamento dei bagagli della compagnia aerea, è utile visualizzare un messaggio di ricerca rapida relativo al conteggio dei voli, al numero di bagagli registrati e ai dettagli di instradamento di un viaggio imminente per un passeggero. L'array bagInfo contiene i dettagli del bagaglio registrato del passeggero. La dimensione dell'array bagInfo determina il numero di borse controllate per passeggero. L'array flightLegs nel bagInfo include i dettagli del volo corrispondenti a ciascuna tappa di viaggio. Il campo di routing include i codici aeroportuali di tutti i frammenti di viaggio. È possibile determinare il numero di voli contando i campi flightNo nell'array flightLegs. Se un passeggero ha più di una borsa controllata, ci sarà più di un elemento nell'array bagInfo, uno per ogni borsa. In questi casi, l'array flightLegs in tutti gli elementi del campo bagInfo di un dato passeggero conterrà gli stessi valori. Questo perché la destinazione di tutti i bagagli controllati per un passeggero sarà la stessa. Durante il conteggio dei campi flightNo, è necessario considerare un solo elemento dell'array bagInfo per evitare la duplicazione dei risultati. In questa query si considera solo il primo elemento, ovvero bagInfo[0]. Poiché l'array flightLegs dispone di un campo flightNo per ogni frammento di viaggio, si tratta di una sequenza e si determina il conteggio dei campi flightNo per passeggero utilizzando la funzione seq_count.
Utilizzare l'istruzione CASE per introdurre messaggi diversi in base al conteggio dei voli. Per la facilità d'uso, nella query vengono considerati solo tre transiti.
Output:
{"fullName":"Lorenzo Phil","routing":"SFO/IST/ATH/JTR","BAGS":2,"FlightInfo":"You have three flights to catch"}
Esempi che utilizzano l'API QueryRequest
È possibile utilizzare l'API QueryRequest per raggruppare e ordinare i dati e recuperarli anche da una tabella NoSQL.
Per eseguire la query, utilizzare l'API NoSQLHandle.query().
Scarica il codice completo GroupSortData.java dagli esempi qui.
//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);
Per eseguire la query, utilizzare il metodo borneo.NoSQLHandle.query().
Scarica il codice completo GroupSortData.py dagli esempi qui.
# 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)
Per eseguire una query, utilizzare la funzione Client.Query.
Scarica il codice completo GroupSortData.go dagli esempi qui.
//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)
Per eseguire una query, utilizzare il metodo query.
JavaScript: scarica il codice completo GroupSortData.js dagli esempi qui.
//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: scaricare il codice completo GroupSortData.ts dagli esempi qui.
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);
Per eseguire una query, è possibile chiamare il metodo QueryAsync o chiamare il metodo GetQueryAsyncEnumerable e ripetere l'enumerazione asincrona risultante.
Scaricare il codice completo GroupSortData.cs dagli esempi qui.
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);