2009-11-23 15 views
12

Desidero selezionare tutti gli ordini distinti dalla mia tabella e ordinare tale elenco in base alla colonna della data. Usando DISTINCT è naturalmente un parametro a livello di ricerca, in modo da cercare qualcosa di simile non funziona:SQL Seleziona valori distinti, ma ordina con un valore diverso

SELECT DISTINCT(orderId, datetime) 
FROM table 
ORDER BY datetime DESC 

Questo restituisce combinazioni tutto distinti della orderId e datetime, quindi sono lasciato con molteplici OrderIDs, che ho non voglio Quindi penso che la clausola DISTINCT non sia la strada da percorrere. Qualcuno ha qualche suggerimento su come potrei risolvere questo problema?

Grazie!

risposta

21

Se ci sono più righe per l'ordine, quale data vuoi mostrare? forse:

SELECT [orderId], MAX([datetime]) 
FROM [table] 
GROUP BY [orderId] 
ORDER BY MAX([datetime]) DESC 
+0

Come follow-up, cosa succede se si desidera selezionare tutti i valori nella tabella, non solo orderId e datetime? Ho la sensazione che siano domande completamente separate, ma ... – Erebus

+0

Dovresti aggregare tutte le colonne o selezionare una particolare riga (min (id), max (id) o simili) e fare un join/sub -query. –

5

Se si dispone di più OrderIDs nella tabella (e ciascuno di loro hanno diversi valori datetime), quale vuoi scegliere? La data più recente, la data più vecchia o qualcos'altro?

4

Forse un CTE aiuterebbe:

WITH CTE 
AS 
(

SELECT orderId FROM table ORDER BY datetime DESC 

) 

SELECT DISTINCT orderId FROM CTE 
+0

Tuttavia, è specifico di SQL Server, che potrebbe non essere utile ... – gbn

+0

Grazie per la correzione, per un attimo ho dimenticato che questo non è il forum MSDN SQL :) – unclepaul84

+0

Dice "La clausola ORDER BY non è valida nelle viste, in linea funzioni, tabelle derivate, sottoquery e espressioni di tabella comuni, a meno che non sia specificato anche TOP, OFFSET o FOR XML. ". – Atomosk

0
SELECT DISTINCT * FROM 
    (SELECT value1 
    FROM table1 
    ORDER BY value2); 

che ha lavorato per me.

+0

Potresti ampliare questa soluzione? –

Problemi correlati